MySQL UNION: 去重相等的数据

引言

在数据库中,我们经常需要对数据进行合并或者联接操作。MySQL提供了UNION操作符,可以用于合并两个或者多个SELECT语句的结果集。然而,在使用UNION操作符时,我们可能会遇到需要去重的情况,特别是当遇到某些数据在多个结果集中存在重复时。本文将介绍如何使用UNION操作符去重相等的数据,并给出相应的代码示例。

UNION操作符

在MySQL中,UNION操作符用于合并两个或者多个SELECT语句的结果集。其基本语法如下:

SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;

UNION操作符会将两个SELECT语句的结果集合并为一个结果集。需要注意的是,UNION操作符会去除结果集中的重复数据。

去重相等的数据

在某些情况下,我们可能需要保留重复数据,但是去重相等的数据。例如,假设我们有两个表,一个是employees,包含员工的ID和姓名,另一个是customers,包含客户的ID和姓名。我们想要找出既是员工又是客户的人员列表,但是不希望重复显示相同的人员。此时,我们可以使用UNION操作符去重相等的数据。

下面是一个示例的类图,描述了employeescustomers两个表的结构:

classDiagram
    class employees{
        employeeID
        employeeName
    }

    class customers {
        customerID
        customerName
    }

示例代码

首先,我们创建employees表并插入一些数据:

CREATE TABLE employees (
    employeeID INT,
    employeeName VARCHAR(100)
);

INSERT INTO employees (employeeID, employeeName)
VALUES (1, 'John'),
       (2, 'David'),
       (3, 'Mary');

接下来,创建customers表并插入一些数据:

CREATE TABLE customers (
    customerID INT,
    customerName VARCHAR(100)
);

INSERT INTO customers (customerID, customerName)
VALUES (1, 'John'),
       (4, 'Lisa'),
       (5, 'David');

现在,我们可以使用UNION操作符来查找既是员工又是客户的人员列表,并去除重复的数据:

SELECT employeeID, employeeName
FROM employees
WHERE employeeName IN (
    SELECT customerName
    FROM customers
)
UNION
SELECT customerID, customerName
FROM customers
WHERE customerName IN (
    SELECT employeeName
    FROM employees
);

运行以上代码,将会得到以下结果:

+------------+--------------+
| employeeID | employeeName |
+------------+--------------+
|          1 | John         |
|          2 | David        |
+------------+--------------+

从结果可以看出,John和David既是员工又是客户,而且他们不会重复出现。

总结

本文介绍了如何使用UNION操作符去重相等的数据。通过使用UNION操作符,我们可以将两个SELECT语句的结果集合并为一个结果集,并去除重复的数据。在某些情况下,我们可能希望保留重复数据,但是去重相等的数据,这时候可以使用UNION操作符来实现。希望本文对你理解并使用UNION操作符有所帮助。

参考文献

  • [MySQL UNION Operator](