MySQL' UNION'删除多列的重复项?

时间:2017-06-05 15:30:19

标签: mysql

我知道UNIONUNION ALL之间的主要区别在于前者删除了重复记录,而后者保留了所有记录。我的问题是,如果有多列,UNION如何删除重复记录?例如,联合T1(A, B, C)T2(A, B, C)

  1. MySQL会考虑(a1, b1, c1)(a1, b2, c2)重复吗?
  2. 如果T1本身有重复项,MySQL会删除这种重复项吗?

1 个答案:

答案 0 :(得分:1)

UNION(非UNION ALL)查询期间,MySQL首先合并所有相关表中的记录,然后删除所有重复项。

考虑使用以下两个表中的UNION

table1
col1 | col2
1    | 1
1    | 1
2    | 2
2    | 2
3    | 4

table2
col1 | col2
1    | 1
1    | 1
3    | 4

考虑以下查询

SELECT * FROM table1
UNION
SELECT * FROM table2

输出将是:

col1 | col2
1    | 1
2    | 2
3    | 4

换句话说,仅仅因为(1, 1)在每个单独的表中重复并不意味着它在结果集中重复出现。此输出仅与MySQL一致,首先组合所有记录,然后删除重复项。这具有副作用,即如果记录在其中一个表中重复出现,它也会被删除。

在这里演示:

Rextester