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
。
这是因为
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
。