如果存在于另一个表中,如何增加价值

时间:2019-01-18 13:14:18

标签: postgresql

我有table_a,它具有一个引用table_b的外键列。如果该值存在于table_b的pkid列中,我想用column_a中的值填充fkey列,但如果不存在,则为null。

我没有使用以下查询来查找是否存在:

UPDATE table_a SET fkey = column_a;

如果table_b中不存在column_a的值,则有时会由于外键约束而失败,所以我认为我需要使用CASE和EXISTS的某种组合,但是我在语法上苦苦挣扎。

约束看起来像:

ALTER TABLE table_a ADD CONSTRAINT
    constraint_fkey FOREIGN KEY (fkey) REFERENCES table_b(pkid);

1 个答案:

答案 0 :(得分:1)

假设该列的所有行均包含null,则可以在table_b上加入a.column_a = b.pkid

update table_a a 
set fkey = column_a
from table_b b
where a.column_a = b.pkid

或检查子查询中是否存在b.pkid

update table_a
set fkey = column_a
where exists (
    select pkid
    from table_b
    where pkid = column_a)

如果必须在适当的行中设置null,则可以在exists中使用case

update table_a
set fkey = (select case
    when exists (
        select pkid
        from table_b
        where pkid = column_a)
    then column_a
    end)