UNION 是 MySQL 中的一个集合操作符,用于合并两个或多个 SELECT 语句的结果集,并且默认情况下会去除重复的行。UNION 的语法如下:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;UNION 可以将多个查询合并为一个查询,使 SQL 语句更加简洁。UNION 会去除结果集中的重复行。UNION:默认去重。UNION ALL:不去重,直接合并结果集。假设我们有两个表 employees 和 contractors,它们都有 name 和 age 字段,我们想获取所有员工和承包商的名字和年龄,并且去除重复项:
SELECT name, age FROM employees
UNION
SELECT name, age FROM contractors;如果你发现 UNION 没有去重,可能是以下原因:
UNION ALL:如果你使用了 UNION ALL,它不会去重,只会合并结果集。UNION ALL:如果你使用了 UNION ALL,它不会去重,只会合并结果集。UNION ALL 改为 UNION。SELECT 语句中的列数据类型不一致,MySQL 可能无法正确比较这些列,从而导致去重失败。SELECT 语句中的列数据类型一致。假设我们有两个表 employees 和 contractors,结构如下:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT
);
CREATE TABLE contractors (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT
);插入一些数据:
INSERT INTO employees (id, name, age) VALUES (1, 'Alice', 30);
INSERT INTO employees (id, name, age) VALUES (2, 'Bob', 25);
INSERT INTO contractors (id, name, age) VALUES (1, 'Alice', 30);
INSERT INTO contractors (id, name, age) VALUES (2, 'Charlie', 35);使用 UNION 去重:
SELECT name, age FROM employees
UNION
SELECT name, age FROM contractors;结果:
+-------+-----+
| name | age |
+-------+-----+
| Alice | 30 |
| Bob | 25 |
| Charlie | 35 |
+-------+-----+如果你遇到其他问题或有更多疑问,请随时提问。