Postgres:按另一个表中引用的id更新列

时间:2014-08-18 15:40:05

标签: sql postgresql select

我有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);

但这会返回错误:

  

错误:用作表达式

的子查询返回多行

我认为这是因为它没有迭代结果。我怎样才能达到预期的效果?

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;