联盟中的一般限制和订单

时间:2015-08-19 22:11:46

标签: mysql

这是我的查询: SELECT pr.ONE FROM prec pr WHERE ... ORDER BY pr.time_of_insertion DESC LIMIT 10) UNION (SELECT hr.TWO FROM hrec hr WHERE ... ORDER BY hr.time_of_insertion DESC LIMIT 10)

两个表都有一个共同的字段名称,尽管它们之间没有关联,即 time_of_insertion 。我想做的是执行查询以检索应该应用于所有联合的限制X (总共X行,而不是每个查询的Y + Y),标准应该是ORDER BY time_of_insertion适用于BOTH表的DESC 。我希望我能让我度过难关。我怎么能这样做?非常感谢你......

1 个答案:

答案 0 :(得分:0)

UNION的文档解释了如何实现两个目标:

  

但是,对于单个ORDER BY语句使用SELECT并不意味着行在最终结果中出现的顺序,因为默认情况下UNION会生成一组无序行。因此,在此上下文中使用ORDER BY通常与LIMIT结合使用,因此它用于确定要为SELECT检索的所选行的子集,即使它不一定会影响最终UNION结果中这些行的顺序。如果ORDER BYLIMIT出现SELECT,则会对其进行优化,因为它无论如何都无效。

     

要使用ORDER BYLIMIT子句对整个UNION结果进行排序或限制,请为各个SELECT语句添加括号并放置ORDER BY或{ {1}}在最后一个之后。

用简单的英语,你可以LIMIT。您所要做的就是将它添加到查询的末尾,在括号外(与ORDER BY time_of_insertion DESC处于同一级别)也可以在{{1}处使值可用}级别,即将UNION放入UNION s。

关于time_on_insertion,您也可以采用相同的方式:在SELECT之前放置LIMIT 10

查询:

LIMIT 10