MySQL中的UNION是否依赖于" SELECT"?

时间:2016-04-13 10:11:37

标签: mysql union

我有两个sql请求。第一个请求是:

SELECT field_1, field_2
FROM mydb.table_1, mydb.table_2
WHERE TIME > 0 
  AND TIME <= 1460539620031 
  AND table_1_id = table_1.id 
UNION
SELECT field_1, field_2 
FROM mydb.table_1, mydb.table_3
WHERE TIME > 0 
  AND TIME <= 1460539620031 
  AND table_1_id = table_1.id; 

,第二个请求是:

SELECT field_1, field_2
FROM mydb.table_1, mydb.table_3
WHERE TIME > 0 
  AND TIME <= 1460539620031 
  AND table_1_id = table_1.id 
UNION
SELECT field_1, field_2 
FROM mydb.table_1, mydb.table_2
WHERE TIME > 0 
  AND TIME <= 1460539620031 
  AND table_1_id = table_1.id; 

它们的不同之处仅在于命令的顺序&#34; SELECT&#34;,而是命令&#34; SELECT&#34;是相同的。但执行这些请求的结果不同:第一个结果集包含的行数多于另一个

为什么要开心呢? MySQL中的UNION是否依赖于&#34; SELECT&#34;?

的顺序

2 个答案:

答案 0 :(得分:0)

我认为工会的结果是订单或工会。但是,union会删除重复项,因此需要在内部对事物进行排序(或等效)。联合的顺序可能会对此删除重复阶段产生影响,大多数情况下,它可能看起来像是按语句顺序生成的。

取自mysql documentation

  

但是,对单个SELECT语句使用ORDER BY并不意味着行在最终结果中出现的顺序,因为UNION默认生成一组无序行。

另一方面,订单不保证。如果您需要特定订单,则需要添加一些括号并在最后添加订单子句。

如果您真的希望按表格获得结果groupeb,您可以查看文档中的解决方案。

  

要使UNION结果中的行由每个SELECT一个接一个地检索的行组成,请在每个SELECT中选择一个附加列作为排序列,并在最后一个SELECT后添加ORDER BY: / p>

(SELECT 1 AS sort_col, col1a, col1b, ... FROM t1)
UNION
(SELECT 2, col2a, col2b, ... FROM t2) ORDER BY sort_col;

答案 1 :(得分:0)

这是因为SQLyog(我运行查询的地方)在查询结尾处添加了表达式“LIMIT 0,10000”。