我知道UNION
和UNION ALL
之间的主要区别在于前者删除了重复记录,而后者保留了所有记录。我的问题是,如果有多列,UNION
如何删除重复记录?例如,联合T1(A, B, C)
和T2(A, B, C)
,
(a1, b1, c1)
和(a1, b2, c2)
重复吗? 答案 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一致,首先组合所有记录,然后删除重复项。这具有副作用,即如果记录在其中一个表中重复出现,它也会被删除。
在这里演示: