SQL Server 2008 查询删除在其他 3 个表中找不到值的所有行

标签 sql sql-server database sql-server-2008

我正在使用 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;

An SQLfiddle to test with .

关于SQL Server 2008 查询删除在其他 3 个表中找不到值的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23594397/

相关文章:

java derby 连接到端口 1,527 上的服务器本地主机,并显示消息“连接被拒绝”

SQL - 仅按最大日期选择唯一名称?

javascript - 如果 SQL 中有数据则显示一个按钮,否则隐藏

sql - 如何从 SQL Server 中的单行中提取多个字符串

sql - T-SQL IF 语句解释

sql-server - 添加凭据参数后无法在 SSMS 中运行 SQL Server 存储过程查询

javascript - Nodejs npm mssql SQLDbType.Structured?

.net - c#.net 本地数据库 Windows 窗体

php - 对于框架 codeigniter,$_POST 为空

mysql - 使用条件从 2 个表中检索数据