删除比较两个表的数据

问题描述

我有两个表:表A和表B。两个表都有一列,例如名称,位置,级别。表A是初始表,表B是表A的更新版本。这意味着表B中将存在新数据。我想编写一个查询,如果表A中存在数据,则从表B中删除数据,但是不在表B中。如果表中有新的数据行,我不想从表B中删除数据。
我的方法就是这样

Delete From TableB Where Exist(
SELECT * FROM dbo.TableB AS TB
EXCEPT 
SELECT * FROM dbo.TableA as TA)

这将删除数据,但如果它也是新插入的数据,它也会从表B中删除数据。任何建议都值得赞赏。

解决方法

DELETE FROM TableB
WHERE EXIST(
  SELECT 1
  FROM TableA 
  WHERE TableA.Name = Name AND TableA.Location = Location AND TableA.Level = Level 
)

如果TableA具有主键,则仅在WHERE条件下检查此键就足够了。此外,如果您拥有此主键(例如Name),则可以这样操作:

DELETE FROM TableB
WHERE Name IN (SELECT Name FROM TableA)