我有两个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;?
的顺序答案 0 :(得分:0)
我认为工会的结果是订单或工会。但是,union会删除重复项,因此需要在内部对事物进行排序(或等效)。联合的顺序可能会对此删除重复阶段产生影响,大多数情况下,它可能看起来像是按语句顺序生成的。
但是,对单个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”。