MySQL UNION ALL去重
在MySQL中,使用UNION ALL
可以将多个查询结果合并起来。然而,有时候我们希望在合并结果时去除重复的记录。本文将介绍如何在使用UNION ALL
时去重。
什么是UNION ALL?
UNION ALL
是MySQL中用于合并查询结果的操作符。它可以将多个SELECT
语句的结果集合并成一个结果集,并且保留所有的记录,包括重复的记录。
语法如下:
SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2
UNION ALL和UNION的区别
在介绍去重的方法之前,我们先来看一下UNION ALL
和UNION
之间的区别。
UNION
操作符和UNION ALL
操作符的区别在于UNION
会对结果进行去重,而UNION ALL
不会去重。
例如,我们有两张表table1
和table2
,它们的结构如下:
CREATE TABLE table1 (
id INT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE table2 (
id INT PRIMARY KEY,
name VARCHAR(50)
);
现在我们往这两张表中插入一些数据:
INSERT INTO table1 (id, name)
VALUES (1, 'Alice'),
(2, 'Bob'),
(3, 'Alice');
INSERT INTO table2 (id, name)
VALUES (4, 'David'),
(5, 'Alice'),
(6, 'Eve');
如果我们使用UNION
操作符来合并这两张表的数据:
SELECT id, name
FROM table1
UNION
SELECT id, name
FROM table2;
得到的结果将会是:
+----+-------+
| id | name |
+----+-------+
| 1 | Alice |
| 2 | Bob |
| 4 | David |
| 5 | Alice |
| 6 | Eve |
+----+-------+
可以看到,结果中去除了重复的记录。
而如果我们使用UNION ALL
操作符来合并这两张表的数据:
SELECT id, name
FROM table1
UNION ALL
SELECT id, name
FROM table2;
得到的结果将会是:
+----+-------+
| id | name |
+----+-------+
| 1 | Alice |
| 2 | Bob |
| 3 | Alice |
| 4 | David |
| 5 | Alice |
| 6 | Eve |
+----+-------+
可以看到,结果中保留了重复的记录。
使用UNION ALL去重
虽然UNION ALL
不会去重,但我们可以通过使用子查询加上DISTINCT
关键字的方式来实现去重。
例如,我们要合并table1
和table2
的数据,并去除重复的记录,可以这样写:
SELECT DISTINCT id, name
FROM (
SELECT id, name
FROM table1
UNION ALL
SELECT id, name
FROM table2
) AS temp;
得到的结果将会是:
+----+-------+
| id | name |
+----+-------+
| 1 | Alice |
| 2 | Bob |
| 3 | Alice |
| 4 | David |
| 5 | Alice |
| 6 | Eve |
+----+-------+
可以看到,结果中重复的记录已经被去除。
总结
在使用UNION ALL
合并查询结果时,如果需要去除重复的记录,可以使用子查询加上DISTINCT
关键字的方式来实现。
通过本文的介绍,你应该对MySQL中的UNION ALL
和去重有了更好的了解。希望本文能够帮助你掌握这一知识点。
erDiagram
table1 {
INT id
VARCHAR(50) name
}
table2 {
INT id
VARCHAR(50) name
}
table1 ||--|{ table2
flowchart TD
A[开始]
B[插入数据]
C[使用UNION ALL合并数据]
D[去重]
E[结束]
A --> B
B -->