我有一个表Main1
,它有21条记录,临时表@recordsToDel
有20条记录。
20两个表中的行相同,但以下选择查询不返回丢失的记录,删除也不会删除它。两个表都有类似的列。
有什么建议吗?
SELECT * FROM dbo.Main1
WHERE NOT EXISTS
(
SELECT * FROM @recordsToDel
);
DELETE FROM dbo.Main1
WHERE NOT EXISTS
(
SELECT * FROM @recordsToDel
);
非常感谢
答案 0 :(得分:6)
试试这个
SELECT * FROM dbo.Main1
EXCEPT
SELECT * FROM @recordsToDel
答案 1 :(得分:1)
您的子查询中需要where语句。 SELECT * FROM @recordsToDel
始终返回行,因此每次都存在。
SELECT *
FROM dbo.Main1 as m
WHERE NOT EXISTS
(
SELECT *
FROM @recordsToDel as r
where r.m_id = m.id
);
我在另一条评论中看到你要在不同的列上进行比较,如果你想从Main1中选择所有在子表中不存在的具有相同名字和姓氏的记录,你可以在where语句中进行比较在子查询中为where r.firstname = m.firstname and r.lastname = m.lastname
。但是你可以使用你想要的任何列来实现你的结果。
答案 2 :(得分:1)
LEFT JOIN包含结果中dbo.Main1表中的所有行,无论@recordsToDel表中的r.Id列是否匹配。
SELECT *
FROM dbo.Main1 m LEFT JOIN @recordsToDel r ON m.Id = r.Id
WHERE r.Id IS NULL
DELETE m
FROM dbo.Main1 m LEFT JOIN @recordsToDel r ON m.Id = r.Id
WHERE r.Id IS NULL