为什么 UNION 返回的行数少于 MySQL 的子请求之一?

问题描述 投票:0回答:1

UNION
可用于合并两个子请求的行:

SELECT column_name FROM table1
UNION
SELECT column_name FROM table2;

默认情况下,MySQL 的

UNION
实际上是
UNION DISTINCT
,这意味着
table1
table2
共有的行都被去重了。例如:

SELECT * FROM table_1;

--------
| name |
--------
| John |
| Mary |
--------

SELECT * FROM table_2;

---------
| name  |
---------
| John  |
| Steve |
---------

SELECT * FROM table1
UNION
SELECT * FROM table2;

---------
| name  |
---------
| John  |
| Mary  |
| Steve |
---------

请注意,

John
在最终结果中只出现一次,因为MySQL会删除该行的重复项。

我们可以这么说

UnionRows.length <= Table1Rows.length + Table2Rows.length

但是,我面临着意想不到的行为。我有

UnionRows.length < Table1Rows.length
。这意味着当我合并两个集合时,我得到的行数比只取其中一个集合的行数要少。我希望有
UnionRows.length >= Table1Rows.length
UnionRows.length >= Table2Rows.length

sql mysql union
1个回答
0
投票

这是因为

UNION
还会删除每个子请求中的重复行。例如:

SELECT * FROM table_1; -------- | name | -------- | John | | John | | John | -------- SELECT * FROM table_2; --------- | name | --------- | Steve | --------- SELECT * FROM table1 UNION SELECT * FROM table2; --------- | name | --------- | John | | Steve | ---------
请注意,最终结果的行数少于 

table_1

© www.soinside.com 2019 - 2024. All rights reserved.