使用UNION后,ORDER BY 怎样使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用UNION后,ORDER BY 怎样使用相关的知识,希望对你有一定的参考价值。
参考技术A union使用时必须时前后连接的操作语句一模一样,order by 进行排序时也要选取相同的参数。本回答被提问者和网友采纳 参考技术B 最近也遇到了union(all) 无法和order by同时使用的情况。解决方法:order by作为一个子查询,再用union(all) 连接。也可以使用with as把排序后的结果作为一个临时表,再进行union(all) 。在 MySQL 中使用 Union All 和 Order By
【中文标题】在 MySQL 中使用 Union All 和 Order By【英文标题】:Using Union All and Order By in MySQL 【发布时间】:2012-10-15 09:24:12 【问题描述】:我有 2 张桌子:
create table advertised_products(id int,title varchar(99),timestamp timestamp);
insert advertised_products select 1,'t1',curdate();
create table wanted_products(id int,title varchar(99),timestamp timestamp);
insert wanted_products select 1,'t1',now();
我正在使用此查询来获取记录:
(
SELECT
ap.*,
'advertised' as type
FROM advertised_products as ap
)
union all
(
SELECT
wp.*,
'wanted' as type
FROM wanted_products as wp
)
ORDER BY timestamp desc limit 3
但它给出了错误:
订单子句中的“时间戳”列不明确
我该如何排序?
【问题讨论】:
您使用的是什么版本的 MySQL?您的查询没有错误,并且在这里运行良好(版本5.5.10
)。
【参考方案1】:
将其包装在子查询中。
SELECT s.*
FROM
(
SELECT ap.*, 'advertised' as type
FROM advertised_products as ap
union all
SELECT wp.*, 'wanted' as type
FROM wanted_products as wp
) s
ORDER BY s.timestamp desc
limit 3
【讨论】:
@JohnWoo,我一定错过了什么。 Why is wrapping in subqueries 需要吗?【参考方案2】:错误就在这里,
"ORDER BY timestamp desc limit 3"
当您组合两个表时,查询必须知道您在哪个表中使用了哪些字段。显然您在“orderby”子句中缺少表引用
提及表名/表名的别名,如下所示
"ORDER BY your_table_name.timestamp desc limit 3"
【讨论】:
以上是关于使用UNION后,ORDER BY 怎样使用的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Union 、 Order By 和 Rownum?
#yyds干货盘点#对union使用order by或 limit
各位大神,怎么在sql语句union中使用order by?