内部联接"多对多"表行为数组

时间:2016-11-29 13:12:58

标签: postgresql

我对PostgreSQL比较新,并试图弄清楚如何解决以下场景。让我们说我有三张桌子:

存储

| store_id |
|----------|
|    1     |
|    2     |
|    3     |

产品

| product_id |
|------------|
|     1      |
|     2      |
|     3      |

store_has_product

| store_id | product_id |
|----------|------------|
|     1    |      3     |
|     1    |      2     |
|     2    |      1     |
|     3    |      3     |
|     1    |      1     |
|     3    |      1     |
|     3    |      2     |

现在我正在尝试构建一个查询,将所有产品连接到stores表并将它们分组到一个数组中,这样我就有了这样的输出:

| store_id | products  |
|----------|-----------|
|    1     | {3, 2, 1} |
|    2     | {2}       |
|    3     | {3, 1, 2} |

我知道PostgreSQL可以使用Arrays,但是我不知道如何编写这样的查询,并且可能已经花了太多时间考虑解决方案。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

如果您使用的是版本8.4或更高版本,则可以使用array_agg

SELECT store_id, array_agg(product_id::text) as products
FROM store_has_product
GROUP BY store_id