gpt4 book ai didi

SQL 使用来自 CASE EXISTS 的值

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

Postgres 9.5.3

来自更新不同表中的 JSONB 字段的更大查询的片段(但我认为 JSONB 内容与问题没有任何相关性):

CASE WHEN EXISTS(SELECT role FROM people WHERE result_id = r2.id AND admin = 't')
THEN (elem || jsonb_build_object('admin', true, 'role', role))
ELSE (elem - 'admin' - 'role')
END

基本上,如果记录存在,我希望能够使用该记录中的 role 字段的值。

按照目前的写法,我们得到一个错误 column "role"does not exist

最佳答案

如果您希望 (SELECT role FROM people WHERE result_id = r2.id AND admin = 't')THEN 提供属性 role > 和 ELSE,它不会。

示例:

b=# create table people (result_id int,admin text, role text);
CREATE TABLE
b=# insert into people select 1,'t','one';
INSERT 0 1
b=# create table r2 (id int,elem jsonb);
CREATE TABLE
b=# insert into r2 select 1,'{"admin":false}';
INSERT 0 1
b=# select CASE WHEN EXISTS(SELECT role FROM people WHERE result_id = r2.id AND admin = 't')
b-# THEN (elem || jsonb_build_object('admin', true, 'role', role))
b-# ELSE (elem - 'admin' - 'role')
b-# END from r2;
ERROR: column "role" does not exist
LINE 2: ...EN (elem || jsonb_build_object('admin', true, 'role', role))
^
b=# alter table r2 add column role text;
ALTER TABLE
b=# select CASE WHEN EXISTS(SELECT role FROM people WHERE result_id = r2.id AND admin = 't')
THEN (elem || jsonb_build_object('admin', true, 'role', role))
ELSE (elem - 'admin' - 'role')
END from r2;
case
-------------------------------
{"role": null, "admin": true}
(1 row)

关于SQL 使用来自 CASE EXISTS 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40799344/

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