返回sql中子查询结果的所有记录

66bbxpm5  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(329)

我有三个表产品,组合Map,和类别。每个产品都有多个投资组合Map和多个类别。在下面的查询中,我想获得产品所属的所有类别。下面的查询只返回条件为true的类别。我想有所有类别的产品时,条件是真实的。
我在中使用了子查询 WHERE 子句,则返回产品标识。
现在对于这个产品,我想得到所有类别。你知道我做错了什么吗。

  1. SELECT c.category_names
  2. FROM
  3. product AS pd
  4. LEFT JOIN
  5. portfolio_mapping AS p
  6. ON
  7. pd.product_id = p.product_id
  8. LEFT JOIN
  9. category_mapping AS c
  10. ON
  11. pd.product_id = c.product_id
  12. WHERE pd.product_id IN
  13. ( SELECT c.product_id FROM category_mapping AS c
  14. WHERE (p.portfolio_mapping_id = 1 AND p.value = 'Yes')
  15. AND (c.category_id = 1 AND c.value = 'Yes') )
yshpjwxd

yshpjwxd1#

因为您的子查询引用回主查询中的行,所以您只为某些行生成in列表。您应该重新编码where子句以添加所有相同的连接。

  1. SELECT c.category_names
  2. FROM
  3. product AS pd
  4. LEFT JOIN
  5. portfolio_mapping AS p
  6. ON
  7. pd.product_id = p.product_id
  8. LEFT JOIN
  9. category_mapping AS c
  10. ON
  11. pd.product_id = c.product_id
  12. WHERE pd.product_id IN
  13. (
  14. SELECT c1.product_id FROM product AS pd1
  15. JOIN portfolio_mapping AS p1 ON pd1.product_id = p1.product_id
  16. JOIN category_mapping AS c1 ON pd1.product_id = c1.product_id
  17. WHERE (p1.portfolio_mapping_id = 1 AND p1.value = 'Yes')
  18. AND (c1.category_id = 1 AND c1.value = 'Yes')
  19. )

就我个人而言,我会将其重新编码为使用where exists()。

展开查看全部

相关问题