在mysql表的最高值上加入问题
时间:2020-03-06 14:58:28 来源:igfitidea点击:
我有一个产品表...
替代文字http://img357.imageshack.us/img357/6393/productscx5.gif
和修订表,该表应用于跟踪对产品信息的更改
替代文字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中也可以吗?
解决方案
历史记录表上的开始和结束日期将使这成为可能。(在插入新记录时,将最近的结束日期保留为空,并在上一条记录上标记结束日期)
否则,我们将不得不使用子查询。
相同的查询在MySQL中是可解析的。
为什么使用左联接而不是内联接或者右联接?
同样,如果我们想以其他方式解决此问题,则可以使用MAX函数。
这是我的处理方式:
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和更大修改值的修订版本。