mysql:union 组合查询

344 阅读2分钟

issue表

image.png

employee_table表

image.png

Union基础方法

-- union 去除重复
SELECT 1, 2 UNION SELECT 1, 2;

image.png  

-- union all 关联所有 包含重复
SELECT 1, 2 UNION ALL SELECT 1, 2;

image.png

 

Union使用规则

Union有他的强大之处,详细介绍之前,首先明确一下Union的使用注意规则。

  1. Union必须由两条或者两条以上的SELECT语句组成,语句之间使用Union链接。
  2. Union中的每个查询必须包含相同的列、表达式或者聚合函数,他们出现的顺序可以不一致(这里指查询字段相同,表不一定一样)
  3. 列的数据类型必须兼容,兼容的含义是必须是数据库可以隐含的转换他们的类型

 

image.png

 

image.png

多表关联

-- union 多表关联
 SELECT
    NAME,
    create_time
FROM
    issue
UNION
SELECT
    employee_name,
    create_time
FROM
    employee_table;

image.png 从上面的检索结果能看出,我们将两个表的数据组合了起来。Union检索遇到不一致的字段名称时候,会使用第一条SELECT的查询字段名称,或者你使用别名来改变查询字段名称

 

区分多表

虽然结果混合在一起没有任何问题,但是当显示到页面的时候,我们需要给用户和文章不同的链接或者其他的区分。所以我们必须确定该条记录来自于哪张表,我们可以添加一个别名来作为表名。

 

-- union 多表关联
 SELECT
    NAME,
    create_time,
    'issue' AS table_name
FROM
    issue
UNION
SELECT
    employee_name,
    create_time,
    'employee' AS table_name
FROM
    employee_table;

image.png

 

包含重复、去除重复

mysql在查询结果集中帮我们自动去除了重复的行 ,一般情况下这样结果是好的,但是如果需要的情况下,我们可以使用Union All操作符来取消自动合并功能 。

 

在多表中,Union 如果是是返回的字段都相同才会被去重。

 

没有去重:

-- union 多表关联
 SELECT
    NAME,
    create_time,
    'issue' AS table_name
FROM
    issue
UNION
SELECT
    employee_name,
    create_time,
    'employee' AS table_name
FROM
    employee_table;

image.png

 

去重

-- union 多表关联
 SELECT
    NAME
FROM
    issue
UNION
SELECT
    employee_name
FROM
    employee_table;

image.png