我正在使用 SQL Server 2008 数据库,其中可以在数据库中使用的所有项目都存储在表 A 中,键值为 ItemNum。表 B 和表 C 使用 ItemNum 作为键值,是实际使用表 A 中的项目的地方。表 A 包含许多在表 B 和表 C 中未使用的重复项。我需要从表 A 中删除表 B 或表 C 中未使用的所有 ItemNum。
现在我有以下两个使用 Select
语句的查询(最终将切换到 Delete
语句),我不确定它们是否正常工作,我想尽可能创建最高效的查询。
USE Database
GO
SELECT ItemNum
FROM B
WHERE EXISTS
(SELECT ItemNum FROM A WHERE A.ItemNum = B.ItemNum)
USE Database
GO
SELECT ItemNum
FROM C
WHERE EXISTS
(SELECT ItemNum FROM A WHERE A.ItemNum = C.ItemNum)
最佳答案
您可以使用简单的 DELETE JOIN;
DELETE A FROM A
LEFT JOIN B ON A.itemnum = B.itemnum
LEFT JOIN C ON A.itemnum = C.itemnum
WHERE b.itemnum IS NULL
AND c.itemnum IS NULL;
关于SQL Server 2008 查询删除在其他 3 个表中找不到值的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23594397/