SQL_DML_Multiple-table Delete 多表删除的用法[亲测有效]

SQL_DML_Multiple-table Delete 多表删除的用法[亲测有效]1 学习参考 MySQL官方文档 https://dev.mysql.com/doc/refman/8.0/en/delete.html 节选自 MySQL 8.0 Reference Manual_

SQL_DML_Multiple-table Delete 多表删除的用法

1 学习参考

  • 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(多表删除)
  • 请注意
    详细的拓展知识点请参考原文

2 LeetCode 题目

题目

Person表
+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| email       | varchar |
+-------------+---------+
id是该表的主键列。该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。

要求
编写一个 SQL 删除语句来删除所有重复的电子邮件,只保留一个id 最小的唯一电子邮件。以任意顺序返回结果表。(注意:仅需要写删除语句)

示例

输入: 
Person 表
+----+------------------+
| id | email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
| 3  | john@example.com |
+----+------------------+
输出: 
+----+------------------+
| id | email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
+----+------------------+
解释: john@example.com重复两次。我们保留最小的Id = 1。

用 Multiple-table Delete 解答

DELETE 
	p1 
FROM 
	Person p1, p2 
WHERE
	p1.Email = p2.Email AND p1.Id > p2.Id

3 多表删除的用法

3.1 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]

3.2 Multi-Table Deletes(多表删除)

你可以在一个 DELETE 语句中指定多个表,根据 WHERE 子句中的条件,从一个或多个表中删除记录。你不能在多表DELETE 语句中使用 ORDER BY 或 LIMIT。table_references子句列出了参与连接的表。

  • 对于第一种多表语法,只有在 FROM 子句前列出的表中的匹配记录被删除。

  • 对于第二种多表语法,只有从 FROM 子句中列出的表(在 USING 子句之前)的匹配记录被删除。这样做的效果是,你可以同时从许多表中删除记录,并且有额外的表只用于搜索。

      DELETE t1
      FROM t1 INNER JOIN t2
      WHERE t1.id=t2.id;
    

    或者

      DELETE
      FROM t1,
      USING t1 INNER JOIN t2
      WHERE t1.id=t2.id ;
    

这些语句在 t1、t2 两个表中搜索要删除的记录,但是只从表t1中删除匹配的记录。

前面的例子使用了INNER JOIN。

请注意 !!!
很多地方会使用省略的写法:FROM t1, t2 ,这和FROM t1 INNER JOIN t2 是一样的。

多表 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;

原文地址:https://www.cnblogs.com/BodhiLeaf/archive/2022/06/27/16414941.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5078.html

(0)
上一篇 2023-05-24
下一篇 2023-05-24

相关推荐

  • 使用Python编程工具Thonny

    使用Python编程工具ThonnyPython是一门易于学习和使用的编程语言,是众多程序员、数据科学家和人工智能从业者所钟爱的语言之一。从Python的运行速度和易用性等方面来说,对新手而言十分友好。然而,学习一门编程语言的过程并不是那么容易,尤其是对于初学者而言。这时候,一个可靠、功能强大且简单易用的集成开发环境(IDE)就非常重要了。Python编程工具Thonny就是这样一款值得推荐的集成开发环境。

    2024-06-09
    47
  • 使用Python构建企业级Web应用程序的最佳模块

    使用Python构建企业级Web应用程序的最佳模块Python是一种功能强大的编程语言,它在Web开发领域的广泛应用使其成为最受欢迎的语言之一。 企业级应用程序需要可靠的模块来确保高效,可靠性和安全性。 这篇文章将介绍Python中最好的企业级Web应用程序模块。

    2023-12-22
    110
  • 9款最好用的MySQL数据库客户端图形界面管理工具,第三款我用了10年「建议收藏」

    9款最好用的MySQL数据库客户端图形界面管理工具,第三款我用了10年「建议收藏」MySQL的管理维护工具非常多,除了系统自带的命令行管理工具之外,还有许多其他的图形化管理工具,这里我介绍几个经常使用的MySQL图形化管理工具,供大家参考。 MySQL是一个非常流行的小型关系型数据

    2022-12-29
    167
  • 如何使用网络硬盘还原数据库

    如何使用网络硬盘还原数据库EXEC sp_configure 'show advanced options', 1; GO RECONFIGURE; GO EXEC sp_configure '…

    2023-02-06
    162
  • 使用Pycharm安装Python包方法

    使用Pycharm安装Python包方法Pycharm是一款常用的Python IDE,具有可视化的操作界面和丰富的功能。在Python的开发过程中,我们通常需要安装一些第三方的Python包,以便于我们编写更加优秀的程序。

    2024-09-03
    25
  • 大数据时代要如何打动消费者_大数据营销的功能和价值

    大数据时代要如何打动消费者_大数据营销的功能和价值消费者是品牌最重要的资产,如何能够更好地留存消费者是企业制胜的关键。以阿里为代表的平台也提出了要从“流量运营”向“消费者运营”的转型。在信息技术发展日新月异的今天,各大企业与平台纷纷建立了自己的大数据

    2023-03-08
    146
  • Python 编写的 Button 交互组件

    Python 编写的 Button 交互组件Button 是一种常见的交互组件,用户通过点击按钮来触发特定事件。在 Python 中,我们可以使用不同的库来创建各种不同的 Button,例如 tkinter 和 PyQt 等。

    2024-01-20
    96
  • Oracle11以后的行列转换[通俗易懂]

    Oracle11以后的行列转换[通俗易懂]Oracle11以后,行列转换有了新的方法。 下面的是已经疏通过的代码,请放心使用。。。 With AA as ( Select A,B,C,row_number() over (partition

    2023-01-31
    141

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注