假设我有一个这样的表结构
Table_AB
=========
+--------------+--------------+-----------+
| AttrA | AttrB | unique_id |
+--------------+--------------+-----------+
| {"a","b"} | {"c","d"} | 25 |
+--------------+--------------+-----------+
attra和attrb都是jsonb列。现在我的任务是更新表\u ab,以便从attra中删除键“a”,并从attrb中删除键“c”。结果应该是this:-
Table_AB
=========
+--------------+-------------+-----------+
| AttrA | AttrB | unique_id |
+--------------+-------------+-----------+
| {"b"} | {"d"} | 25 |
+--------------+-------------+-----------+
为此,我编写了如下查询:
UPDATE Table_AB
SET AttrA = ( SELECT AttrA::jsonb #- '{a}' FROM Table_AB where unique_id= 25) ,
SET AttrB = ( SELECT AttrB::jsonb #- '{c}' FROM Table_AB where unique_id= 25)
FROM Table_AB where unique_id= 25;
我可以使用这个查询获得所需的输出。但是我想优化这个查询,只使用一个嵌套语句,而不是两个嵌套语句和一个语句,比如。。
UPDATE Table_AB
SET AttrA, AttrB = ( SELECT AttrA::jsonb #- '{a}', AttrB::jsonb #- '{c}'
FROM Table_AB
WHERE unique_id= 25)
FROM Table_AB
WHERE unique_id= 25;
我怎样才能做到这一点?
1条答案
按热度按时间llycmphe1#
可能需要较短的update语句
它没有任何子查询。
或
要设置的列及其各自的值用副词 Package 起来。
顺便说一句,你的陈述应该是
即使不是理想情况,也不会产生任何错误(不应优先考虑)。
演示