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)
您可以使用 :
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)
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表名。