当前位置:  开发笔记 > 后端 > 正文

T-SQL:选择要通过连接删除的行

如何解决《T-SQL:选择要通过连接删除的行》经验,为你挑选了5个好方法。

场景:

假设我有两个表,TableA和TableB.TableB的主键是单列(BId),是TableA中的外键列.

在我的情况下,我想删除TableA中与TableB中的特定行链接的所有行:我可以通过连接执行此操作吗?删除从连接中提取的所有行?

DELETE FROM TableA 
FROM
   TableA a
   INNER JOIN TableB b
      ON b.BId = a.BId
      AND [my filter condition]

或者我被迫这样做:

DELETE FROM TableA
WHERE
   BId IN (SELECT BId FROM TableB WHERE [my filter condition])

我问的原因是在我看来,在处理较大的表时,第一个选项会更有效.

谢谢!



1> TheTXI..:
DELETE TableA
FROM   TableA a
       INNER JOIN TableB b
               ON b.Bid = a.Bid
                  AND [my filter condition] 

应该管用


我认为因为你必须指出从哪个表中删除记录.我刚刚使用语法`DELETE TableA,TableB ...`运行了一个查询,并且实际上删除了两者的相关记录.尼斯.
@Andrew,请记住,这在T-SQL中不起作用.
一个问题.为什么我们需要编写'DELETE TableA FROM'而不是'DELETE FROM'?我看到它只适用于这种情况,但为什么呢?
在MySQL中,你会收到错误"MULTI DELETE中的未知表'TableA',这是因为你声明了TableA(a)的别名.小调整:`删除一个FROM表一个内部联接表b b b.Bid = a.Bid和[我的过滤条件]

2> cmsjr..:

我会使用这种语法

Delete a 
from TableA a
Inner Join TableB b
on  a.BId = b.BId
WHERE [filter condition]


实际上,这对我来说也是首选.特别是在我需要实际加入同一个表的情况下(例如,用于删除重复记录).在这种情况下,我需要使用别名来删除我正在删除的"边",这种语法使我非常清楚我从重复别名中删除.
我也更喜欢这种语法,似乎在逻辑上更加有意义地发生了什么.另外,我知道你可以使用相同类型的语法进行更新.

3> Diadistis..:

是的你可以.示例:

DELETE TableA 
FROM TableA AS a
INNER JOIN TableB AS b
ON a.BId = b.BId
WHERE [filter condition]


我更喜欢用别名来引用第一行中的表.那就是"删除"而不是"删除表A".在您自己加入表格的情况下,它会清楚您要删除哪一方.

4> 小智..:

尝试使用访问数据库执行此操作,发现我需要在删除后立即使用.*.

DELETE a.*
FROM TableA AS a
INNER JOIN TableB AS b
ON a.BId = b.BId
WHERE [filter condition]



5> Michael Butl..:

它在MySQL中几乎相同,但您必须在"DELETE"后面使用表别名:

DELETE a
FROM TableA AS a
INNER JOIN TableB AS b
ON a.BId = b.BId
WHERE [filter condition]

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有