Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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,目前,我想从相关表中选择最近的值。因此,我有一个销售表,它可以包含与单个销售相关的许多交易。我目前可以使用子查询获取最新的销售,如下所示,但速度非常慢 UPDATE Sales s SET LastTrans = (SELECT Stamp FROM Transactions WHERE SalesID = s.ID ORDER BY Desc LIMIT 1) WHERE LastTr

目前,我想从相关表中选择最近的值。因此,我有一个销售表,它可以包含与单个销售相关的许多交易。我目前可以使用子查询获取最新的销售,如下所示,但速度非常慢

UPDATE Sales s
SET LastTrans = (SELECT Stamp 
                   FROM Transactions 
                  WHERE SalesID = s.ID 
               ORDER BY Desc LIMIT 1)
WHERE LastTrans IS NULL;

有没有一种方法可以使用连接来做类似的事情,就像我对数千条记录进行连接一样,这可能需要很多时间

您没有说明内部查询按哪列排序,所以我假设它是Stamp

UPDATE Sales s INNER JOIN (
    SELECT SalesID, MAX(Stamp) AS MaxStamp FROM Transactions
    GROUP BY SalesID
) AS t ON s.ID = t.SalesID
SET LastTrans = t.MaxStamp
WHERE LastTrans IS NULL;

如果您可以在sql上添加运行
EXPLAIN
的输出,这将非常有用。您还可以发布表架构吗?是否创建了正确的索引?