2011-06-01 64 views
19

我的目标是执行两个不同的查询,然后将它们组合。
我的代码是:UNDER后ORDER BY和LIMIT

SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1 
UNION 
SELECT * FROM some tables WHERE ... 

我得到以下错误:

#1221 - Incorrect usage of UNION and ORDER BY

重要的是,ORDER BY只对第一个查询。我该如何执行此任务?

+1

阅读[教程](HTTP://www.mysqltutorial。 org/sql-union-mysql.aspx) – luca 2011-06-01 08:03:41

回答

24

您可以使用括号中允许使用的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 */ 
+2

语法错误...您需要从别名(括号内)中选择 – Bohemian 2011-06-01 08:13:55

+0

没有语法错误,我刚查过! – 2011-06-01 08:14:34

+0

嗯 - 我也检查了,得到了错误。也许我需要升级我的MySQL。抱歉! – Bohemian 2011-06-02 01:44:06

8
SELECT * FROM (SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1) x 
UNION ALL 
SELECT * FROM some tables WHERE ... 

注意使用UNION ALL

  • UNION从结果集和数据库的命令删除重复的行所有在此之前的行(所以整个结果集进行排序)
  • UNION ALL保留订单和副本
2

只是把一切都放在圆括弧:

(SELECT * FROM table1 ORDER BY datetime ) 
UNION 
(SELECT * FROM table2 ORDER BY datetime DESC) 
+1

语法错误...您需要从别名(括号内)选择 – Bohemian 2011-06-01 08:15:41

+0

[docs](http://www.mysqltutorial.org/sql-union-mysql.aspx)你在哪里读过它? – luca 2011-06-01 08:19:37

+0

我检查并得到了错误。也许我需要升级我的MySQL。抱歉! – Bohemian 2011-06-02 01:44:41

1
(SELECT user_id AS id FROM tbl_user) 
UNION 
(SELECT address_id AS id FROM tbl_address) 
ORDER BY id ASC LIMIT 10