如果联接表没有行,则更新表

时间:2020-02-24 18:30:24

标签: sql sql-server

我有两个具有关系的表,如果子表中没有记录,我会尝试更新基表。

表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

3 个答案:

答案 0 :(得分:1)

如果您要使用table1id中不匹配的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)