首页 文章

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

提问于
浏览
0

我有2个表,我试图根据从列与特定值匹配的另一个表中提取行id来更改特定列的值 .

表1(cc_show)包含列(background_color),如果表2(cc_show_instances)列'记录'或列'rebroadcast'等于1,我想将此值更改为固定值(ff0000) .

此外,对于表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);

但是这会返回错误:

ERROR:用作表达式的子查询返回的多行

我假设是因为它没有迭代结果 . 我怎样才能达到预期的效果?

1 回答

  • 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;
    

相关问题