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

从两个表中获取差异并在SQL Server中删除,sql,sql-server,Sql,Sql Server,我在编写一个查询逻辑时面临一个问题,该查询删除两个表中都不存在的数据 例如,我有一个表Stage和Parent。我使用复合主键来唯一标识记录多个主键 阶段结构和数据 S_Column1(Primary) | PRIDATA1 | PRIDATA4 S_Column2(Primary) | PRIDATA2 | PRIDATA5 S_Column3(Primary) | PRIDATA3 | PRIDATA6 S_Column4 | DJUC | JDNC S_Colum

我在编写一个查询逻辑时面临一个问题,该查询删除两个表中都不存在的数据

例如,我有一个表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
父结构和数据

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作为主键,因为它们的条目不在阶段表中

我并不熟练,但我知道我需要使用JOIN查找匹配的数据,并从父表中删除其条目不在阶段表中的其余数据


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

您可能正在查找EXCEPT运算符。
阅读此处:

您可能正在寻找EXCEPT运算符。 阅读此处:

尝试不存在

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)
尝试不存在

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)

是的,我想到了,但我只能选择和显示它。如何使用EXCEPT删除这些数据?您可以创建一个临时表,其中包含要删除的数据,然后使用where子句从父表中删除。例如,在“从某物中选择某物”中的where列是的,我想到了,但我只能选择并显示它。如何使用EXCEPT删除这些数据?您可以创建一个临时表,其中包含要删除的数据,然后使用where子句从父表中删除,例如,在where列中,从有效的SomethingTanks中选择某些内容!你能解释一下吗,这是什么“1”?选择1?Exists不返回任何数据,仅返回布尔值true/false。所以Select中的任何数据都可以。选择1只会节省一些不必要的工作。谢谢你的帮助!你能解释一下吗,这是什么“1”?选择1?Exists不返回任何数据,仅返回布尔值true/false。所以Select中的任何数据都可以。选择1只会节省一些不必要的工作。