ORDER BY和LIMIT之后的UNION

问题描述

| 我的目标是执行两个不同的查询,然后将它们组合。 我的代码是:
SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1 
UNION   
SELECT * FROM some tables WHERE ...
我收到以下错误:   #1221-UNION和ORDER BY的使用不正确 重要的是ORDER BY仅用于第一个查询。如何执行此任务?     

解决方法

        您可以使用括号允许对单个查询使用
ORDER
/
LIMIT
(SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1)
UNION   
(SELECT * FROM some tables WHERE ...)
ORDER BY 1   /* optional -- applies to the UNIONed result */
LIMIT 0,100 /* optional -- applies to the UNIONed result */
    ,        
SELECT * FROM (SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1) x
UNION ALL
SELECT * FROM some tables WHERE ...
注意the5的用法: “ 6”从结果集中删除重复的行,并且数据库在执行此操作之前将所有行排序(因此对整个结果集进行了排序)
UNION ALL
保留顺序和重复项     ,        只需将所有内容放在圆括号中即可:
(SELECT * FROM table1 ORDER BY datetime  )
UNION   
(SELECT * FROM table2 ORDER BY datetime DESC)
    ,        
(SELECT user_id AS id FROM tbl_user)
UNION
(SELECT address_id AS id FROM tbl_address)
ORDER BY id ASC LIMIT 10