这个头衔很残酷,但我不知道怎么说.
我有一个绑定到user_id的键值表,用于存储整个站点的用户首选项.如果用户没有进入并更新他们的任何设置,那么每当我要求一个密钥时(比如说“FAVORITE_COLOR”它将为null,所以我需要拉出我与默认用户绑定的默认设置, user_id = 0.
我正在考虑UNION的行,将user_id = 0的结果放到查询的底部,但这只会导致重复.我不确定它是否可能,但我还是喜欢能够说出类似的话:
SELECT val FROM k_v WHERE user_id = 123 AND k = 'FAVORITE_COLOR'
UNION IF val IS NULL
SELECT val FROM k_v WHERE user_id = 0 AND k = 'FAVORITE_COLOR';
有什么好办法吗?
编辑:感谢您的所有帮助.如果你的用例只是抓住这个问题的单个值,那么来自dual的NVL正是你想要的,但是如果你打算在同一个查询中返回多个对,那么看一下其他的一些答案,因为他们可能实际上更有意义的实施.
我接下来讨论了ZeissS的建议,因为它很简单,仍然是一个查询,可以使用多个k,v对,并且我没有问题做可能的重复过滤客户端.