加入mysql表中的最高值时出现问题

时间:2008-10-01 12:59:46

标签: mysql sql

我有产品表......

alt text http://img357.imageshack.us/img357/6393/productscx5.gif

和修订表,用于跟踪产品信息的更改

alt text http://img124.imageshack.us/img124/1139/revisionslz5.gif

我尝试在数据库中查询所有产品及其最新版本......

select
*
from `products` as `p`
left join `revisions` as `r` on `r`.`product_id` = `p`.`product_id`
group by `p`.`product_id`
order by `r`.`modified` desc

但我总是得到第一次修订。我需要在一个选择(即没有子查询)中执行此操作。我可以在mssql中管理它,这在mysql中是否可能?

3 个答案:

答案 0 :(得分:4)

我是这样做的:

SELECT p.*, r.*
FROM products AS p
  JOIN revisions AS r USING (product_id)
  LEFT OUTER JOIN revisions AS r2 
    ON (r.product_id = r2.product_id AND r.modified < r2.modified)
WHERE r2.revision_id IS NULL;

换句话说:找到没有其他修订版本的修订版本具有相同的product_id和更大的修改值。

答案 1 :(得分:1)

历史记录表上的开始日期和结束日期将使这成为可能。(在插入新记录时,将最近结束日期保留为空并在上一记录上标记结束日期)

否则你将不得不使用子查询。

答案 2 :(得分:0)

同样的查询在MySQL中是可解析的。

为什么使用Left JOIN而不是INNER join或RIGHT join?

此外,如果您想以不同的方式解决这个问题,您可以使用MAX功能。