我有两个具有关系的表,如果子表中没有记录,我会尝试更新基表。
表1:
id value
1 abc
2 xyz
表2:
id table1_id
1 1
2 1
因此,在这种情况下,我想将table1 id 2更新为pqr
,因为它在table2中没有关联的行。对于ID 1,什么也没发生。
我尝试过这种方式,但这是完全错误的
update table1 set value = 'pqr'
from table1 t1 inner join table2 t2 on count(t2.table1_id) < 1
答案 0 :(得分:1)
如果您要使用table1
列id
中不匹配的table2
行来更新table1_id
的行,则可以使用LEFT JOIN
并更新不匹配的行:
update t1
set t1.value = 'pqr'
from table1 t1 left join table2 t2
on t2.table1_id = t1.id
where t2.table1_id is null
请参见demo。
结果:
> id | value
> -: | :----
> 1 | abc
> 2 | pqr
答案 1 :(得分:0)
我相信您正在寻找WHERE NOT EXISTS
。
update table1
set value = 'pqr'
from table1 t1
WHERE
NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t2.table1_id = t1.id);
尽管这是假设您是在标题中提问,而不是在测试中的问题。
答案 2 :(得分:0)
UPDATE table1
SET value = 'pqr'
WHERE id IN (SELECT t1.id FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.table1_id)