避免使用UNION和ORDER BY的mysql查询中的重复项

时间:2012-07-05 15:34:51

标签: mysql duplicate-removal

我有两个表,比如说table1和table2有公共列,id和update_date。我希望根据最新的update_date降序获取id和update_date。我一直使用'union'和'order by',它们按照update_date的降序给出了结果,但是有重复的id,我不知道如何摆脱它。

我的查询就像,

(select id,update_date from table1 where [condition])
UNION
(select id,update_date from table2 where [condition])
order by update_date desc;

我可以通过从(查询上方)添加select distinct id作为temp来摆脱重复的id;但问题是我也需要update_date。

任何人都可以建议如何摆脱重复,仍然获得id和update_date信息。

3 个答案:

答案 0 :(得分:1)

假设你想要重复的最新更新,这个应该可以工作:

SELECT id, max(update_date) AS last_update
FROM
  ( (select id,update_date from table1 where [conditions])
     UNION
    (select id,update_date from table2 where [conditions]) ) both_tables
GROUP BY id
ORDER by last_update DESC

答案 1 :(得分:0)

将查询包裹在DISTINCT块中:

SELECT DISTINCT * FROM (
  select id,update_date from table1 where [condition]
  UNION
  select id,update_date from table2 where [condition]
)
order by update_date desc;

答案 2 :(得分:0)

限制第二个查询的结果:

select id, update_date
  from table1
 where [conditions]
union
select id, update_date
  from table2
 where [conditions]
   and id not in (select id from table1 where [conditions])