gpt4 book ai didi

sql - Oracle:当同一查询中更具体的值为空时,如何获取默认值?

转载 作者:行者123 更新时间:2023-12-04 18:37:47 27 4
gpt4 key购买 nike

这个标题很残酷,但我不知道该怎么说。

我有一个与 user_id 相关联的键值表,该表在整个站点中存储用户首选项。如果用户没有进入并更新他们的任何设置,那么任何时候我要求一个键(比如“FAVORITE_COLOR”它将为空,所以我需要拉出我绑定(bind)到默认用户的默认设置,用户 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 对,而且我在执行可能的重复过滤客户端时没有问题。

最佳答案

用这个,

select
nvl(
(SELECT val FROM k_v WHERE user_id = 123 AND k = 'FAVORITE_COLOR'),
(SELECT val FROM k_v WHERE user_id = 0 AND k = 'FAVORITE_COLOR')
) val
from dual
;

从 Oracle 文档中,

NVL(expr1, expr2) :
NVL 允许您在查询结果中将 null(返回为空白)替换为字符串。如果
expr1 为空,然后 NVL 返回 expr2。如果 expr1 不为空,则 NVL 返回 expr1。

关于sql - Oracle:当同一查询中更具体的值为空时,如何获取默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3301758/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com