SQL删除基于连接条件

19 sql join sql-delete

可以使用连接查询基于满足条件删除记录吗?

例如,我有一个链接表连接3条记录.我现在的查询删除了这个表中的一个记录,其中一个id不是IN()一个内爆的Php数组.我已经意识到,如果数组中不存在id,并且它们属于基于另一个表的链接的某个其他表,则查询应仅从该表中删除记录.

Gre*_*rty 28

对于SQL Server,命令略有不同:

DELETE FROM TableA
FROM TableA LEFT OUTER JOIN TableB ON TableA.Column = TableB.Column 
WHERE TableB.Column IS NULL
Run Code Online (Sandbox Code Playgroud)

不,这不是一个错字,是的,你需要"FROM表A" 的两倍.至少,您需要第二个FROM(第一个是可选的).以下优点是它适用于SQL Server和MySQL:

DELETE TableA
FROM TableA LEFT OUTER JOIN TableB ON TableA.Column = TableB.Column 
WHERE TableB.Column IS NULL
Run Code Online (Sandbox Code Playgroud)


Bil*_*ill 11

我喜欢使用EXISTS子句:

DELETE FROM TableA
WHERE
  <<put your array condition here>> 
  AND NOT EXISTS 
  (SELECT 1 FROM TableB Where TableB.ID=TableA.ID)
Run Code Online (Sandbox Code Playgroud)


Ard*_*oli 8

您可以使用 :

DELETE基于加入:

DELETE A      
FROM TableA AS A
  LEFT OUTER JOIN TableB As B ON A.Id = B.TabaleAId 
WHERE B.Column IS NULL
Run Code Online (Sandbox Code Playgroud)

使用SubQuery删除:

DELETE 
FROM TableA AS A
Where
    A.id not in ( Select B.TabaleAId From Tab;eB As B )
Run Code Online (Sandbox Code Playgroud)

要么

DELETE FROM TableA
WHERE Not EXISTS 
  (
    SELECT * 
    FROM TableB As B
    Where B.TableAId = TableA.Id
   )
Run Code Online (Sandbox Code Playgroud)

删除使用表格表达式:

With A 
As
    (
        Select TableA.*
        FROM TableA AS A
            LEFT OUTER JOIN TableB As B ON A.Id = B.TabaleAId 
        WHERE B.Column IS NULL
    )
Delete From A
Run Code Online (Sandbox Code Playgroud)


JNK*_*JNK 5

DELETE FROM TableA
LEFT OUTER JOIN TableB
WHERE TableB.Column IS NULL
Run Code Online (Sandbox Code Playgroud)

将删除TableA中没有TableB中相应记录的记录.这就像你追求的那样吗?


小智 5

DELETE FROM a
  FROM TableA AS a LEFT OUTER JOIN TableB AS b 
  on a.CALENDAR_DATE = b.CALENDAR_DATE AND a.ID = b.ID 
  Where b.ID is null
Run Code Online (Sandbox Code Playgroud)

您可以首先使用select语句并验证要删除的记录,然后删除select语句并使用上述查询语法添加Delete FROM表名。