Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接mysql表中的最高值时出现问题_Mysql_Sql - Fatal编程技术网

连接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函数在这种情况下是如何帮助我的吗?