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