【发布时间】:2017-02-07 14:40:23
【问题描述】:
所以我在我的应用程序中发现了一个错误,它没有向我显示它应该有的结果。我将其追溯到以下 SQL 查询(我删除了不相关的部分)。
如您所见,查询从wc_hncat_products 中选择行,其中对应的 id 在wc_hncat_product_category_has_product 表中的计数>= 1
如果我以子查询结果作为列执行查询,您可以看到结果是1。但是当我在 WHERE 子句中使用它时,>= 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
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,但比较仍然失败,因为没有返回任何结果,而子查询在两种情况下都是相同的。
【问题讨论】:
-
那些小图文我看不懂。
-
编辑您的问题并将问题中的查询作为 text 传递。您在网站上有足够的经验,应该知道这是个好主意。
-
我更新了问题以包含代码块。
-
您使用的是什么版本的 MySQL?您的查询中的
category_id和id列是什么数据类型? -
Mysql 版本是 5.7.16,这两列都是 INT,但是当我删除
1和785周围的单引号时,没有任何变化