首页 文章

错误的MySQL子查询计数比较结果

提问于
浏览
1

所以我在我的应用程序中发现了一个错误,它没有向我显示它应该有的结果 . 我将其追溯到以下SQL查询(我删除了不相关的部分) .

正如您所看到的,查询从 wc_hncat_products 中选择了相应的id在 wc_hncat_product_category_has_product 表中的计数> = 1的行

如果我以子查询结果作为列执行查询,则可以看到结果为 1 . 但是当我在WHERE子句中使用它时 >= 1 比较失败了 .

证明子查询返回1:
Proof that the subquery DOES return 1

SELECT `wc_hncat_products`.`id`, 
   (SELECT Count(*) 
    FROM   `wc_hncat_product_categories` 
           INNER JOIN `wc_hncat_product_category_has_product` 
                   ON `wc_hncat_product_categories`.`id` = 
                      `wc_hncat_product_category_has_product`.`category_id` 
    WHERE  `wc_hncat_product_category_has_product`.`product_id` = 
           `wc_hncat_products`.`id` 
           AND `category_id` IN ( '1' )) count 
FROM   `wc_hncat_products` 
WHERE  `id` IN ( '785' )

此查询返回一行,列 count 值为1

在WHERE子句
No results with subquery count comparison in WHERE clause
中没有子查询计数比较的结果

SELECT `wc_hncat_products`.`id` 
FROM   `wc_hncat_products` 
WHERE  (SELECT Count(*) 
        FROM   `wc_hncat_product_categories` 
           INNER JOIN `wc_hncat_product_category_has_product` 
                   ON `wc_hncat_product_categories`.`id` = 
                                      `wc_hncat_product_category_has_product`.`category_id` 
            WHERE  `wc_hncat_product_category_has_product`.`product_id` = 
           `wc_hncat_products`.`id` 
           AND `category_id` IN ( '1' )) >= 1 
   AND `id` IN ( '785' )

此查询选择0行..

这怎么可能?您可以看到计数实际为1,但是比较仍然失败,因为在两个方案中子查询相同时未返回任何结果 .

1 回答

  • 0

    实现该类型检查的标准方法是使用EXISTS .

    这样的事情对你有用:

    SELECT `wc_hncat_products`.`id` 
    FROM   `wc_hncat_products` 
    WHERE  EXISTS (SELECT NULL 
            FROM   `wc_hncat_product_categories` 
               INNER JOIN `wc_hncat_product_category_has_product` 
                       ON `wc_hncat_product_categories`.`id` = 
                                          `wc_hncat_product_category_has_product`.`category_id` 
                WHERE  `wc_hncat_product_category_has_product`.`product_id` = 
               `wc_hncat_products`.`id` 
               AND `category_id` IN ( '1' )) 
       AND `id` IN ( '785' )
    

相关问题