gpt4 book ai didi

postgresql - Postgres - 在 CASE WHEN 中使用 select 语句

转载 作者:行者123 更新时间:2023-11-29 11:28:07 25 4
gpt4 key购买 nike

在内部情况下,我正在执行 select 语句,如果返回任何内容,那么我需要获取它的值,但出现错误

ERROR:  missing FROM-clause entry for table "us"

查询是..

SELECT u.user_id,
CASE
WHEN
(SELECT us.attr_value
FROM user_setting us
WHERE us.user_id = u.user_id) IS NOT NULL THEN us.attr_value
ELSE
(SELECT gus.attr_value
FROM global_user_setting gus
WHERE gus.attr_key='key')
END
FROM user u
WHERE u.user_id IN (1,
2,3)

错误出现在 IS NOT NULL THEN us.attr_value 我理解这个问题但找不到如何在 select 语句之外获取该值?

最佳答案

尝试:

COALESCE((SELECT us.attr_value
FROM user_setting us
WHERE us.user_id = u.user_id),
(SELECT us.attr_value
FROM global_user_setting gs
WHERE gus.attr_key='key'))

相反。问题的原因是,es 别名的绑定(bind)在子选择之外不可见(因为它在“标量”上下文中使用)。整个子选择基本上是一个表达式,它将产生一个值。

另一种(恕我直言更好)方法是在 enrollment_settings 表上进行左连接:

SELECT u.user_id,
COALESCE(us.attr_value, (SELECT gus.attr_value
FROM global_user_setting gs
WHERE gus.attr_key='key'))
FROM user u LEFT JOIN user_settings es ON us.user_id = u.user_id
WHERE u.user_id IN (1, 2, 3)

我在这里假设,此连接将在 user 的每行中最多生成一行。

关于postgresql - Postgres - 在 CASE WHEN 中使用 select 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23296323/

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