Mysql 从两个表中选择一个字段不能重复的行

Mysql 从两个表中选择一个字段不能重复的行,mysql,Mysql,我有两张桌子: 表A: id|文件 表B: id |文档| id |批准|公开|发布|时间|版本 现在,表_B的docs_id就是表_A的id 我想获得最后20个条目的id和文件(按发布时间降序排列)。 我的问题是,表B中有几行,其中唯一不同的(除了发布时间)是版本。所以我只想得到最新的版本 SELECT d.* FROM docs d LEFT JOIN doc_versions dv ON d.id = dv.docs_id WHERE dv.approved='1' AND dv.publ

我有两张桌子:

表A: id|文件

表B: id |文档| id |批准|公开|发布|时间|版本

现在,表_B的docs_id就是表_A的id

我想获得最后20个条目的id和文件(按发布时间降序排列)。 我的问题是,表B中有几行,其中唯一不同的(除了发布时间)是版本。所以我只想得到最新的版本

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

如何改进此查询,以避免重复?Distinct不起作用,因为行不完全相同,因为版本字段(因为我不计算发布时间戳中的秒数,可能有一行的发布时间等于另一行,但版本不同。)

那么,您的查询不会从版本返回任何内容,因此您可以执行以下操作:

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
唯一的问题似乎是
orderby
子句。如果最新版本具有最新的发布时间,则该版本将具有正确的顺序(并因此选择)