连接mysql表中的最高值时出现问题
我有一张产品表 还有一个修订表,用来跟踪产品信息的变化 我试图查询所有产品的数据库,以及它们的最新版本连接mysql表中的最高值时出现问题,mysql,sql,Mysql,Sql,我有一张产品表 还有一个修订表,用来跟踪产品信息的变化 我试图查询所有产品的数据库,以及它们的最新版本 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 但我总是第一次复习。我需要在oneselect中执行此操作(即无子查询)。我可以
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
但我总是第一次复习。我需要在oneselect中执行此操作(即无子查询)。我可以在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;
选择p.*,r*
从产品中提取p
使用(产品标识)作为r连接修订
左外连接修订版为r2
打开(r.product_id=r2.product_id,r.modified
换言之:查找没有其他版本的版本,该版本具有相同的产品id和更大的修改值。子查询有什么问题?这就是方法。或者你使用的是不支持它们的旧版本mysql?你能给我一个例子说明MAX函数在这种情况下是如何帮助我的吗?