联合查询(Union Query)是MySQL中的一种查询方式,它允许将多个SELECT语句的结果集合并成一个结果集。联合查询主要用于合并两个或多个SELECT语句的结果集,并且这些结果集必须具有相同数量的列,且对应的列数据类型必须兼容。
假设有两个表table1
和table2
,它们的结构相同:
CREATE TABLE table1 (
id INT,
name VARCHAR(50)
);
CREATE TABLE table2 (
id INT,
name VARCHAR(50)
);
INSERT INTO table1 (id, name) VALUES (1, 'Alice'), (2, 'Bob');
INSERT INTO table2 (id, name) VALUES (2, 'Bob'), (3, 'Charlie');
SELECT id, name FROM table1
UNION
SELECT id, name FROM table2;
结果:
| id | name | |----|---------| | 1 | Alice | | 2 | Bob | | 3 | Charlie |
SELECT id, name FROM table1
UNION ALL
SELECT id, name FROM table2;
结果:
| id | name | |----|---------| | 1 | Alice | | 2 | Bob | | 2 | Bob | | 3 | Charlie |
原因:联合查询的各个SELECT语句的结果集列数必须相同。
解决方法:确保每个SELECT语句返回的列数相同,并且对应列的数据类型兼容。
SELECT id, name FROM table1
UNION
SELECT id, name FROM table2; -- 正确
SELECT id, name FROM table1
UNION
SELECT id FROM table2; -- 错误,列数不匹配
原因:联合查询的各个SELECT语句的结果集对应列的数据类型必须兼容。
解决方法:确保每个SELECT语句返回的列的数据类型兼容。
SELECT id, name FROM table1
UNION
SELECT id, CAST(name AS VARCHAR(50)) FROM table2; -- 正确
SELECT id, name FROM table1
UNION
SELECT id, age FROM table2; -- 错误,数据类型不兼容
通过以上信息,您应该对MySQL联合查询有了更全面的了解,并且能够解决一些常见问题。
领取专属 10元无门槛券
手把手带您无忧上云