我有连接查询(在magento中):
SELECT FLOOR(rating.rating_summary/20) AS `rating_value`,
COUNT(*) AS `count`
FROM `catalog_product_flat_3` AS `e`
INNER JOIN `catalogsearch_result` AS `search_result` ON search_result.product_id=e.entity_id
AND search_result.query_id='218'
INNER JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id
AND price_index.website_id = '1'
AND price_index.customer_group_id = 0
INNER JOIN `review_entity_summary` AS `rating` ON rating.entity_pk_value = e.entity_id
AND rating.store_id = 0;
需要在rating_value
或count < 1
+--------------+-------+
| rating_value | count |
+--------------+-------+
| NULL | 0 |
+--------------+-------+
1 row in set (0,00 sec)
但由于某些原因,我尝试WHERE count > 0
或rating_value IS NOT NULL
它表示主题栏rating_value
,count
不存在,我该怎么办?
谢谢!
答案 0 :(得分:1)
正确。 SELECT
中定义的列别名无法在WHERE
中使用。您需要子查询或重复表达式:
WHERE FLOOR(rating.rating_summary/20) IS NOT NULL
这相当于:
WHERE rating.rating_summary IS NOT NULL
count
需要进入HAVING
子句,我写作:
HAVING count = 0 OR rating_value IS NOT NULL
我还希望你的查询有一个GROUP BY
子句,它似乎缺失了。
所以我怀疑你想要:
SELECT FLOOR(rating.rating_summary/20) AS `rating_value`,
COUNT(*) AS `count`
FROM `catalog_product_flat_3` pf INNER JOIN
`catalogsearch_result` sr
ON sr.product_id = pf.entity_id AND
sr.query_id = 218 INNER JOIN
`catalog_product_index_price` pip
ON pip.entity_id = pf.entity_id AND
pip.website_id = 1 AND
pip.customer_group_id = 0 INNER JOIN
`review_entity_summary` r
ON r.entity_pk_value = pf.entity_id AND r.store_id = 0
GROUP BY FLOOR(r.rating_summary/20)
HAVING `count` = 0 OR rating_value IS NULL;