1

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

非常感谢

4

3 回答 3

6

尝试这个

 SELECT * FROM dbo.Main1
 EXCEPT
 SELECT * FROM @recordsToDel
于 2012-09-19T15:39:04.233 回答
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
于 2012-11-11T08:51:54.510 回答
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。但是您可以使用任何您想要获得结果的列。

于 2012-09-19T15:39:00.683 回答