一个 SQL 查询已经有 3 个问题,但新问题不断出现 =)。
输入数据:PostgreSQL。有 5 个表:products, colors, sizes, products_to_colors, products_to_sizes。多对多关系 - 每个产品可以有多种颜色和多种尺寸。每个颜色和尺寸可能有多个产品。颜色、尺寸和产品之间的关系使用 2 个表格products_to_colors, products_to_sizes.
表中的字段:
- 产品 -
id,name(其他无所谓,我们简化任务=)) - colours -
id,color(color表示颜色本身,例如绿色) - 颜色 -
id,size(size例如,尺寸本身用 表示XL) - products_to_colors -
id,color_id,product_id - products_to_colors -
id,size_id,product_id
我需要从这些表中获取数据并获取产品模型。尝试使用这样的查询:
SELECT
products.*,
string_agg(colors.color, ',') AS colors,
string_agg(sizes.size, ',') AS sizes
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
LEFT JOIN products_to_sizes ON products.id = products_to_sizes.product_id
LEFT JOIN sizes ON sizes.id = products_to_sizes.size_id
GROUP BY products.id
在 postgres 的响应中,大小和颜色是重复的,即:
"id": 4,
"name": "test",
"colors": "белый,желтый,белый,желтый",
"sizes": "38,38,48,48"
为什么会发生这种情况,我该如何解决?
PS还有images带图片的表格(多对一关系——1个产品,多张图片。),和products_to_products(里面保存了类似的产品)。我也会在查询中使用它们,我也尝试在查询中使用它们,然后值\u200b\u200bare显示4次,而不是2次
您将
products_to_colorsandproducts_to_sizes、 otsda 和它们之间的重复项相乘。像这样制作两个子查询: