首页 > 解决方案 > 获取没有请求的产品计数的查询

问题描述

我写了以下SQL,

SELECT COUNT(f.productid) AS count
FROM   `product_list` `f`
      LEFT JOIN `product_requests` `r`
      ON `r`.`product_id` = `f`.`productid`
WHERE  `f`.`product_cat` IN( 1, 4 )
      AND `f`.`product_subcat` IN( '1', '2', '3', '4',
                           '5', '6', '7', '9',
                           '10', '11')
      AND `r`.`product_id` IS NULL

我要做的是获取尚未针对特定产品类别和产品子类别提出产品请求的产品数量。

查询没有给出输出?它超时。

可能是什么问题?

标签: mysqlsqljoinleft-joinouter-join

解决方案


尝试这个:

SELECT COUNT (f.productid) AS COUNT
  FROM (SELECT *
          FROM       `product_list` f where `f`.`product_cat` IN( 1, 4 )
      AND `f`.`product_subcat` IN( '1', '2', '3', '4',
                           '5', '6', '7', '9',
                           '10', '11') ) `f`
      LEFT JOIN `product_requests` `r`
      ON `r`.`product_id` = `f`.`productid` AND `r`.`product_id` IS NULL

你的情况:

where
...
`r`.`product_id` IS NULL

需要在 ON 子句中,否则它会将你的左连接转换为内连接。有关详细信息,请参阅此链接

此外,为了优化,请尝试在加入之前进行过滤。


推荐阅读