我的目标是执行两个不同的查询,然后将它们合并。
我的代码是:
SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1
UNION
SELECT * FROM some tables WHERE ...
我遇到了以下错误:
#1221 - UNION 和 ORDER BY 的使用不正确
很重要的一点是,ORDER BY 只能用于第一个查询。我该如何执行此任务?
我的目标是执行两个不同的查询,然后将它们合并。
我的代码是:
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 ...
注意使用 UNION ALL
:
UNION
从结果集中删除重复的行,并在执行此操作之前,数据库对 所有 行进行排序(因此整个结果集已经排好序)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