我有一个嵌套查询的严重问题,我怀疑 MySQL 将其解释为相关子查询,而实际上它应该是不相关的。该查询跨越两个表,一个是产品列表,另一个是它们在不同时间点的价格。我的目标是返回价格范围始终高于某个值的产品的每条价格记录。我的查询如下所示:
SELECT oP.id, oP.title, oCR.price, oC.timestamp
FROM Crawl_Results AS oCR
JOIN Products AS oP
ON oCR.product = oP.id
JOIN Crawls AS oC
ON oCR.crawl = oC.id
WHERE oP.id
IN (
SELECT iP.id
FROM Products AS iP
JOIN Crawl_Results AS iCR
ON iP.id = iCR.product
WHERE iP.category =2
GROUP BY iP.id
HAVING (
MAX( iCR.price ) - MIN( iCR.price )
) >1
)
ORDER BY oP.id ASC
单独来看,内部查询执行良好,并返回价格范围高于标准的产品的 id 列表。如果我在 IN 子句中提供一个简单的 id 列表,外部查询也可以正常工作。但是,当我将它们一起运行时,查询需要约 3 分钟才能返回约 1500 行,因此我认为它正在为外部的每一行执行内部查询,这并不理想。我确实在内部和外部查询中的列别名相同,所以我认为如上所述在内部和外部对它们进行不同的别名可以解决它,但事实并非如此。
关于这里发生了什么的任何想法?