我敢肯定有人以前一定遇到过这个或类似的问题,但我在谷歌或 DBA 交换搜索中找不到任何东西。
我有一个存储键/值对的表。表中还有 2 个限制列,host 和 environment,都可以为 null。限制表的工作方式是,如果主机列中有条目,则键/值适用于该主机,类似地,如果环境列中有条目,则该条目仅对该环境有效。如果使用主机或环境查找键/值,则有限值优先于主机=NULL 或环境=NULL 的值。此外,主机优先于环境。
例如,这里有一些表条目:
id env host key value
1 NULL NULL fruit apple
2 prod NULL fruit banana
3 prod www fruit mango
4 test NULL fruit peach
5 NULL test fruit orange
鉴于该示例数据,我所追求的是一个 SQL 语句(或多个语句),它将根据这些条件返回这些数据:
env host key data returned
NULL NULL fruit 1, fruit, apple
prod NULL fruit 2, fruit, banana
NULL www fruit 3, fruit, mango
junk junk fruit 1, fruit, apple // NULL/NULL values are used as a fallback
junk www fruit 1, fruit, apple // no match, fallback
prod test fruit 5, fruit, orange // host=test takes precedence
那有意义吗?
我可以将搜索分解为多个选择,尝试每一个,检查我是否命中等等,但我希望尽可能高效地实现这一点。
理想情况下,如果以后添加更多限制器(例如组、命名空间等),我希望搜索类型可以轻松扩展。
任何人?
所以你要传入两个可选参数:
示例 sql(将放在存储过程中):