SQL_DML_Usage of Multiple-table Delete(多表删除的用法)
2022/6/28 2:21:36
本文主要是介绍SQL_DML_Usage of Multiple-table Delete(多表删除的用法),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
学习参考
- MySQL官方文档
https://dev.mysql.com/doc/refman/8.0/en/delete.html - 节选自
MySQL 8.0 Reference Manual_SQL Statements_Data Manipulation Statements_DELETE Statement - 原文知识点
Multiple-Table Syntax(多表语法)、Multi-Table Deletes(多表删除) - 请注意
详细的拓展知识点请参考原文
使用方法
Multiple-Table Syntax(多表语法)
-
第1个DELETE语句
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] tbl_name[.*] [, tbl_name[.*]] ... FROM table_references [WHERE where_condition]
-
第2个DELETE语句
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name[.*] [, tbl_name[.*]] ... USING table_references [WHERE where_condition]
Multi-Table Deletes(多表删除)
你可以在一个DELETE语句中指定多个表,根据WHERE子句中的条件,从一个或多个表中删除记录。你不能在多表DELETE中使用 ORDER BY 或 LIMIT。table_references子句列出了参与连接的表。
-
对于第一种多表语法,只有在FROM子句前列出的表中的匹配记录被删除。
-
对于第二种多表语法,只有从FROM子句中列出的表(在USING子句之前)的匹配记录被删除。这样做的效果是,你可以同时从许多表中删除记录,并且有额外的表只用于搜索。
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;
或者
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;
这些语句在搜索要删除的记录时使用所有三个表,但是只从表t1和t2中删除匹配的记录。
前面的例子使用了INNER JOIN,但是多表DELETE语句可以使用SELECT语句中允许的其他类型的连接,例如LEFT JOIN。例如,要删除存在于t1中但在t2中没有匹配的记录,可以使用LEFT JOIN:DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;
注意!!!
如果你为一个表声明了一个别名,你在引用该表时必须使用该别名。
DELETE t1 FROM test AS t1, test2 WHERE ...
多表DELETE中的表别名应该只在语句的table_references部分声明。在其他地方,允许引用别名,但不允许声明别名。
正确:
DELETE a1, a2 FROM t1 AS a1 INNER JOIN t2 AS a2 WHERE a1.id=a2.id; DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2 WHERE a1.id=a2.id;
错误:
DELETE t1 AS a1, t2 AS a2 FROM t1 INNER JOIN t2 WHERE a1.id=a2.id; DELETE FROM t1 AS a1, t2 AS a2 USING t1 INNER JOIN t2 WHERE a1.id=a2.id;
这篇关于SQL_DML_Usage of Multiple-table Delete(多表删除的用法)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-07面向对象编程基础:初学者指南
- 2024-09-07数据结构入门:了解基础概念与简单应用
- 2024-09-07面向对象编程入门:掌握基本概念与实践
- 2024-09-07数据结构入门:从基础概念到基本操作
- 2024-09-07从零开始学数据库:入门级指南与实操技巧
- 2024-09-07综合设备故障分析与预防:实例代码与优化策略
- 2024-09-07数据库入门:轻松掌握数据管理基础
- 2024-09-07面向对象入门:快速掌握对象编程基础
- 2024-09-07数据库教程:入门与实践指南
- 2024-09-07面向对象开发教程 - 从零基础到实践应用的进阶之路