我有一个查询,我觉得它非常庞大,可以进行优化。第一件事显然是用 join 替换 not in subquery 但它会影响我拥有的 sub-sub 查询。我会很感激关于它的建议/解决方法。
这是查询
SELECT *
FROM lastweeksales
WHERE productID = 1234
AND retailer NOT
IN (
SELECT retailer
FROM sales
WHERE productID
IN (
SELECT productID
FROM products
WHERE publisher = 123
)
AND DATE = date(now())
)
基本上,我想从上周销售的产品中获取行,其中零售商不在场但今天进行销售,但销售应该只针对某个发布商的产品。
:S:S:S
最佳答案
您可以通过 INNER JOIN
轻松地将 2 个内部子查询组合在一起。对于外部,您应该使用 LEFT OUTER
加入,然后过滤 retailer IS NULL
,如下所示:
SELECT lws.*
FROM lastweeksales lws
LEFT JOIN (SELECT s.retailer
FROM sales s
JOIN products p USING (productID)
WHERE p.publisher = 123
AND s.date = date(now())) AS r
ON lws.retailer = r.retailer
WHERE r.retailer IS NULL;
关于MySql 查询优化,用 join 替换 not in subquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10813966/