SQL DELETE STATEMENT说明

Bad*_*aji 2 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
Run Code Online (Sandbox Code Playgroud)

编辑 这是行不通的,我以为是正确的:

 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
Run Code Online (Sandbox Code Playgroud)

谢谢

Eri*_*ndt 5

这是因为表联接。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
Run Code Online (Sandbox Code Playgroud)