所以我在我的应用程序中发现了一个错误,它没有向我显示它应该有的结果 . 我将其追溯到以下SQL查询(我删除了不相关的部分) .
正如您所看到的,查询从 wc_hncat_products
中选择了相应的id在 wc_hncat_product_category_has_product
表中的计数> = 1的行
如果我以子查询结果作为列执行查询,则可以看到结果为 1
. 但是当我在WHERE子句中使用它时 >= 1
比较失败了 .
证明子查询返回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子句
中没有子查询计数比较的结果
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 回答
实现该类型检查的标准方法是使用EXISTS .
这样的事情对你有用: