这个标题很残酷,但我不知道该怎么说。
我有一个与 user_id 相关联的键值表,该表在整个站点中存储用户首选项。如果用户没有进入并更新他们的任何设置,那么任何时候我要求一个键(比如“FAVORITE_COLOR”它将为空,所以我需要拉出我绑定到默认用户的默认设置,用户 ID = 0。
我正在考虑将 user_id = 0 结果 UNION 到查询的底部,但这只会导致重复。我不确定这是否可能,但我希望能够说些什么:
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 对,并且在执行可能的重复过滤客户端时我没有问题。