MySql查询优化,不使用join替换子查询

时间:2012-05-30 09:55:35

标签: mysql subquery

我有一个查询,我觉得非常笨重,可以做优化。显然,第一件事就是不用子连接替换子连接,但它会影响我的子子查询。我很感激建议/解决方法。

这是查询

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

1 个答案:

答案 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;