我在编写查询逻辑时遇到问题,该查询删除了2个表中不存在的数据。
例如,我有一个表“Stage”和“Parent”。我使用复合主键来唯一标识记录(多个主键)。
舞台结构和数据
S_Column1(Primary) | PRIDATA1 | PRIDATA4
S_Column2(Primary) | PRIDATA2 | PRIDATA5
S_Column3(Primary) | PRIDATA3 | PRIDATA6
S_Column4 | DJUC | JDNC
S_Column5 | DSSDC | JDDOS
父结构和数据
P_Column1(Primary) | PRIDATA1 | PRIDATA4 | PRIDATA7
P_Column2(Primary) | PRIDATA2 | PRIDATA5 | PRIDATA8
P_Column3(Primary) | PRIDATA3 | PRIDATA6 | PRIDATA9
P_Column4 | DJUC | JDNC | FFED
P_Column5 | DSSDC | JDDOS | NHUY
以上只是两个表格的结构和数据样本。
所以基本上我想要做的是写一个查询来删除有的行
PRIDATA7 PRIDATA8
和PRIDATA9
作为主键,因为它们的条目不存在于STAGE TABLE中。
我不熟练,但我知道我需要使用JOIN
找出匹配的数据,并从PARENT TABLE中删除其他数据,其中的条目不存在于STAGE TABLE中
PS:我将在触发器中使用它。
答案 0 :(得分:3)
尝试不存在
delete from parent
where not exists (
select 1
from stage s
where s.S_Column1 = parent.S_Column1 and s.S_Column2 = parent.S_Column2 and s.S_Column3 = parent.S_Column3)
答案 1 :(得分:1)
您可能正在寻找EXCEPT运算符。 请在此处阅读:https://msdn.microsoft.com/pl-pl/library/ms188055(v=sql.110).aspx