SQL Server:WHERE NOT EXISTS不起作用

时间:2012-09-19 15:37:01

标签: sql sql-server sql-server-2008 tsql sql-server-2005

我有一个表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
);

非常感谢

3 个答案:

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