首页 文章

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

提问于
浏览
1

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

这是查询

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 回答

  • 1

    您可以通过 INNER JOIN 轻松地将2个内部子查询组合在一起 . 对于外部的,你应该使用 LEFT OUTER join然后过滤 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;
    

相关问题