我有2个表,我试图根据从列与特定值匹配的另一个表中提取行id来更改特定列的值。
表1(cc_show)包含列(background_color),如果表2(cc_show_instances)列'记录'那么我想将此值更改为固定值(ff0000)。或者专栏'重播'等于1。
此外,对于表2中的所有列(cc_show_instances),其中包含'记录'或者'重播'列不等于1,我想将表1中的相应id更改为0000ff。
我可以使用以下命令在表2(cc_show_instances)中搜索所有正面结果:
SELECT DISTINCT show_id
FROM cc_show_instances
WHERE rebroadcast = 1
OR record = 1
我尝试将此作为包含在WHERE选项中的SELECT,如下所示:
UPDATE cc_show
SET background_color = 'ff0000'
WHERE id = (SELECT DISTINCT show_id
FROM cc_show_instances
WHERE rebroadcast = 1 OR record = 1);
但这会返回错误:
错误:用作表达式
的子查询返回多行
我认为这是因为它没有迭代结果。我怎样才能达到预期的效果?
答案 0 :(得分:0)
评论中告诉您IN
更好的是,加入FROM
clause中的第二个表格。这有点短,IN
不适合大型集合(至少在Postgres 8.4 - 9.2的测试中)。
UPDATE cc_show s
SET background_color = 'ff0000'
FROM cc_show_instances si
WHERE 1 IN (si.rebroadcast, si.record) -- IN is good for small sets
AND s.id = si.show_id;