从两个表中选择行,其中一个字段不能重复

时间:2013-06-14 15:33:33

标签: mysql

我有两张桌子:

TABLE_A: id |文件

表-B: id | docs_id |批准|公众| publish_time |版本

现在,table_B的docs_id是table_A的id。

我想获取最后20个条目的id和文件(按publish_time排序降序)。 我的问题是,table_B中有几行,其中唯一不同的是(除了publish_time)版本。所以我只想获得最新版本。

SELECT d.* FROM docs d LEFT JOIN doc_versions dv ON d.id = dv.docs_id WHERE dv.approved='1' AND dv.public='1' ORDER BY publish_time DESC LIMIT 0,20

我怎么能改进这个查询,所以我不会重复?区别不起作用,因为行不完全相同,因为版本字段(因为我不计算我的publish_time时间戳中的秒数,有可能有一行,其中publish_time等于另一行但版本不同。 。)

1 个答案:

答案 0 :(得分:1)

好吧,你的查询没有从版本中返回任何内容,所以你可以这样做:

SELECT d.*
FROM docs d LEFT JOIN
     doc_versions dv
     ON d.id = dv.docs_id
WHERE dv.approved='1' AND dv.public='1'
group by d.doc_id
ORDER BY max(publish_time) DESC
LIMIT 0,20

唯一的问题似乎是order by条款。如果最新版本具有最新的publish_time,那么这将具有正确的排序(因此选择)。