SQL DELETE 语句解释

标签 sql sql-server

此请求有效:

有两个连续的 FROM。 当我删除第一个时,它不起作用,为什么?

DELETE FROM TableA
FROM TableA dim
LEFT OUTER JOIN (
    SELECT DISTINCT ColA
    FROM TableB
    UNION ALL
    SELECT DISTINCT ColA
    FROM tableC

) A ON A.ColA= dim.ColA
WHERE A.ColA IS NULL

编辑 这个不起作用,我认为是正确的:

 DELETE 
    FROM TableA dim
    LEFT OUTER JOIN (
        SELECT DISTINCT ColA
        FROM TableB
        UNION ALL
        SELECT DISTINCT ColA
        FROM tableC

    ) A ON A.ColA= dim.ColA
    WHERE A.ColA IS NULL

谢谢

最佳答案

这是因为表连接的原因。 SQL 引擎需要知道要从哪个源删除,而奇怪的 FROM FROM 语法可以实现这一点。

您的语句在功能上与此等效,除了我用表别名替换第一个 FROM 子句之外,它完全相同:

DELETE dim
FROM TableA dim
LEFT OUTER JOIN (
    SELECT DISTINCT ColA
    FROM TableB
    UNION ALL
    SELECT DISTINCT ColA
    FROM tableC

) A ON A.ColA= dim.ColA
WHERE A.ColA IS NULL

关于SQL DELETE 语句解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55265214/

相关文章:

SQL 查询我有一个表名 student 有两列 name 和 status

sql - 使用具有重复行的表值参数批量插入

sql - 关于在数据库中保存密码的问题

c# - 电子邮件通知服务

sql-server - 使用游标的优缺点(在SQL Server中)

sql - 在两列上检查唯一的有效方法?

java - 标准 Hibernate 排序依据

sql - 使用不同的 WHERE 语句从单个列返回多列数据

sql - SQL中 "IF EXISTS"和 "IF NOT EXISTS"之间的区别?

sql-server - 如何在非英语 Windows 上为服务帐户创建 SQL Server 登录名?