ORDER BY和LIMIT之后的UNION

lvi*_*vil 20 mysql sql union sql-order-by

我的目标是执行两个不同的查询,然后将它们组合起来.
我的代码是:

SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1 
UNION   
SELECT * FROM some tables WHERE ...
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

#1221 - UNION和ORDER BY的使用不正确

重要的是ORDER BY仅用于第一个查询.我该如何执行此任务?

Sal*_*n A 27

您可以使用括号来允许在单个查询上使用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 */
Run Code Online (Sandbox Code Playgroud)

  • 语法错误...您需要从别名(括号)选择中进行选择 (2认同)

Boh*_*ian 10

SELECT * FROM (SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1) x
UNION ALL
SELECT * FROM some tables WHERE ...
Run Code Online (Sandbox Code Playgroud)

注意使用UNION ALL:

  • UNION从结果集中删除重复的行,并且数据库在执行此操作之前对所有行进行排序(因此整个结果集已排序)
  • UNION ALL 保留订单和重复