从两个表中获取差异并在SQL Server中将其删除

时间:2017-09-19 13:37:48

标签: sql sql-server

我在编写查询逻辑时遇到问题,该查询删除了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 PRIDATA8PRIDATA9作为主键,因为它们的条目不存在于STAGE TABLE中。

我不熟练,但我知道我需要使用JOIN找出匹配的数据,并从PARENT TABLE中删除其他数据,其中的条目不存在于STAGE TABLE中

PS:我将在触发器中使用它。

2 个答案:

答案 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