MySQL中UNION结果行数少于单个子查询的原因是什么?
MySQL UNION 合并结果行的特性与异常情况
UNION 可用于合并两个子查询的结果行,基本语法如下:
SELECT column_name FROM table1 UNION SELECT column_name FROM table2;
默认情况下,MySQL 中的 UNION 等效于 UNION DISTINCT,会对两个子查询结果中的重复行进行去重。举个例子:
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 只出现一次,这就是去重的效果。
由此可得正常情况下的行数关系:UnionRows.length <= Table1Rows.length + Table2Rows.length。
但实际使用中遇到了异常情况:UnionRows.length < Table1Rows.length,也就是合并两个集合后的行数居然少于其中一个集合的行数,而按预期应该满足 UnionRows.length >= Table1Rows.length 且 UnionRows.length >= Table2Rows.length。
内容的提问来源于stack exchange,提问作者philippe_b
相关产品推荐
相关产品推荐

