我有一个查询,我觉得非常笨重,可以做优化。显然,第一件事就是不用子连接替换子连接,但它会影响我的子子查询。我很感激建议/解决方法。
这是查询
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
答案 0 :(得分:1)
您可以通过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;