在MySQL中使用Union All和Order By

时间:2012-10-15 09:24:13

标签: mysql sorting union-all

我有两张桌子:

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

但它给出了错误:

  

order子句中的列'timestamp'是不明确的

我该如何对此进行排序?

2 个答案:

答案 0 :(得分:3)

将其包装在子查询中。

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

答案 1 :(得分:0)

错误在于此处,

 "ORDER BY timestamp desc limit 3"

在组合两个表时,查询必须知道您在哪个表中使用哪些字段。明确地说您在“orderby”子句中缺少表引用

提及表名的表名/别名,如下所示

 "ORDER BY your_table_name.timestamp desc limit 3"
相关问题