ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL_DML_Usage of Multiple-table Delete(多表删除的用法)

2022-06-27 06:00:07  阅读:202  来源: 互联网

标签:JOIN Multiple t2 DML t1 多表 id 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;

标签:JOIN,Multiple,t2,DML,t1,多表,id,DELETE
来源: https://www.cnblogs.com/BodhiLeaf/p/16414941.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有