我有一个名为deliveries的主表,它与deliveries_languages(dl)、deliveries_markets(dm)和deliveries_tags(dt)存在一对多的关系,其中delivery_id作为外键。这3个表分别与languages、markets和tags存在一对一的关系。此外,deliveries表与companies存在一对一的关系,具有company_id作为外键。以下是我编写的查询语句:
SELECT deliveries.*, languages.display_name, markets.default_name, tags.default_name, companies.name
FROM deliveries
JOIN deliveries_languages dl ON dl.delivery_id = deliveries.id
JOIN deliveries_markets dm ON dm.delivery_id = deliveries.id
JOIN deliveries_tags dt ON dt.delivery_id = deliveries.id
JOIN languages ON languages.id = dl.language_id
JOIN markets ON markets.id = dm.market_id
JOIN tags ON tags.id = dt.tag_id
JOIN companies ON companies.id = deliveries.company_id
WHERE
deliveries.name ILIKE '%new%' AND
deliveries.created_by = '5f331347-fb58-4f63-bcf0-702f132f97c5' AND
deliveries.deleted_at IS NULL
LIMIT 10
这里我得到了重复的 delivery_ids,因为对于每个 delivery_id,都有多种语言、市场和标签。我想在不同的 delivery_ids 上使用 limit,并且同时希望将那些多种语言、市场和标签分组并填充到一行中。
目前看起来是这样的:
delivery_id | name |languages | markets | tags
------------|------|----------|----------|-----------
1 | d1 |en | au | tag1
1 | d1 |de | sw | tag2
2 | d2 |en | au | tag1
2 | d2 |de | sw | tag2
3 | d3 |en | au | tag1
3 | d3 |de | sw | tag2
有没有办法使我的数据看起来像下面这样:
delivery_id | name |languages | markets | tags
------------|------|----------|----------|-----------
1 | d1 |en, de | au,sw | tag1, tag2
2 | d2 |en, de | au,sw | tag1, tag2
3 | d3 |en, de | au,sw | tag2, tag3
补充一下,上述表格只包含了部分数据,实际查询返回的列还有更多,但上面的是重要的。有人能帮我解决这个问题吗?