输入数据:PostgreSQL。有 3 个表:products、colors、products_to_colors。多对多关系——每个产品可以有多种颜色。每种颜色都可以出现在几种产品中。颜色和产品之间的关系是使用 3 个表来实现的products_to_colors。
表中的字段:
products- 两个字段:id,name(其余的没关系,我们简化任务=))colors- 2 个字段:id,color(color颜色本身以绿色表示)products_to_colors- 3 个字段:id,color_id,product_id
我正在使用这样的查询从表中获取数据:
SELECT products.*, string_agg(colors.color, ',') AS colors
FROM products
LEFT JOIN products_to_colors ON products.id = products_to_colors.product_id
LEFT JOIN colors ON colors.id = products_to_colors.color_id
GROUP BY products.id
任务是从数据库中仅获取具有某种颜色的产品。
例如:我只想获取颜色为id1 的产品:
SELECT products.*, string_agg(colors.color, ',') AS colors
FROM products
LEFT JOIN products_to_colors ON products.id = products_to_colors.product_id
LEFT JOIN colors ON colors.id = products_to_colors.color_id
WHERE products_to_colors.color_id=1
GROUP BY products.id
问题。正确退回的产品,只有那些有id1的颜色可用,但colors只有1的颜色在列id中。虽然产品也有id2、3、4的颜色,但它们不在列中colors。
如何修复我的数据库查询以获得所需的结果?
要选择具有给定特性的产品,您可以: