我有三个表产品,组合Map,和类别。每个产品都有多个投资组合Map和多个类别。在下面的查询中,我想获得产品所属的所有类别。下面的查询只返回条件为true的类别。我想有所有类别的产品时,条件是真实的。
我在中使用了子查询 WHERE
子句,则返回产品标识。
现在对于这个产品,我想得到所有类别。你知道我做错了什么吗。
SELECT c.category_names
FROM
product AS pd
LEFT JOIN
portfolio_mapping AS p
ON
pd.product_id = p.product_id
LEFT JOIN
category_mapping AS c
ON
pd.product_id = c.product_id
WHERE pd.product_id IN
( SELECT c.product_id FROM category_mapping AS c
WHERE (p.portfolio_mapping_id = 1 AND p.value = 'Yes')
AND (c.category_id = 1 AND c.value = 'Yes') )
1条答案
按热度按时间yshpjwxd1#
因为您的子查询引用回主查询中的行,所以您只为某些行生成in列表。您应该重新编码where子句以添加所有相同的连接。
就我个人而言,我会将其重新编码为使用where exists()。