贝利信息

如何在mysql中使用union合并查询结果_sql合并查询

日期:2026-01-19 00:00 / 作者:P粉602998670
U

NION合并多个SELECT结果并自动去重,要求列数相同、类型兼容,ORDER BY/LIMIT仅限最后;UNION ALL不去重、性能更高;列数不同时可用NULL或别名对齐。

在 MySQL 中,UNION 是合并多个 SELECT 查询结果的常用方式,它会自动去重并返回一个结果集。如果允许重复行,可用 UNION ALL,性能更高。

UNION 的基本用法和规则

使用 UNION 时,几个 SELECT 必须满足以下条件:

UNION 和 UNION ALL 的区别

UNION 会对结果自动去重,内部会执行排序和比较操作,开销略大;UNION ALL 直接拼接所有行,不检查重复,速度更快,适合明确不需要去重的场景。

例如:

SELECT name FROM users WHERE status = 1
UNION ALL
SELECT name FROM admins WHERE level > 5;

给合并结果统一排序和限制行数

ORDER BY 和 LIMIT 必须写在最后一条 SELECT 之后,且只能出现一次。可配合括号或子查询增强可读性:

(SELECT id, name FROM users)
UNION
(SELECT id, name FROM guests)
ORDER BY name LIMIT 10;

注意:若需按不同字段排序,建议在每个 SELECT 中用别名统一列名,再对外层排序。

处理列数不一致或类型不匹配的情况

如果两个表字段数不同,可通过补 NULL 或常量对齐:

SELECT id, name, email FROM users
UNION
SELECT id, username AS name, NULL AS email FROM old_users;

MySQL 会尝试隐式转换(如 '123' 转为数字),但强烈建议显式转换或确保类型一致,避免意外截断或报错。