1

我有一个查询,我觉得它非常庞大,可以进行优化。第一件事显然是用 join 替换 not in 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

4

1 回答 1

1

您可以通过轻松将 2 个内部子查询组合在一起INNER JOIN。对于外层,您应该使用LEFT OUTERjoin 然后 filter on 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;
于 2012-05-30T12:28:10.210 回答