【发布时间】:2023-03-27 00:15:01
【问题描述】:
删除时,我可以通过 LEFT JOIN 删除两个或多个表中的行。
DELETE a, b FROM
table1 a
LEFT JOIN table2 b on (a.id = b.id)
WHERE ...
我也可以INNER JOIN
DELETE a, b FROM
table1 a
INNER JOIN table2 b on (a.id = b.id)
WHERE ...
究竟这两者有什么区别?
那么其他连接呢
在delete 语句中使用其他连接类型是否有意义?这些有什么用处?
删除...连接和使用外键有什么区别
如果我使用ON DELETE CASCADE 子句设置外键:
- 是否匹配
INNER或“LEFT”连接(或以上都不匹配)? - 这是否比使用连接“更好”(更快/更安全)?
我正在使用 MySQL,但我也想知道还有哪些其他数据库支持它。
【问题讨论】:
-
它不是“通用的”。并非所有 DBMS 都允许使用 DELETE 语句进行 JOIN。所以它应该正确地用 mysql 标记
-
@thirsty_horse, PostgreSQL, SQL-server, DB2, Oracle 做。
-
SQL Server 不允许这个多表
DELETE。DELETE操作的目标只能是 1 个表。DELETE a, b ...将无效。 -
@Martin,谢谢今天学到了新东西...
-
@le dorfier,好的,对此感到惊讶。您碰巧知道哪些数据库支持它?
标签: mysql sql join foreign-key-relationship sql-delete