可以检索包含外键的sql表来替换序列化数据吗?

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

(摘自评论)
我使用MySQL5.7AWS极光古里布·博科夫
假设像产品这样的实体:

product
--------
id | name
1  | hoge
2  | fuga

有标签:

tag
---------
id | name
11 | tag1
22 | tag2

要知道,是由产品使用标签还是现在,Map表使用:

map_product_tag
product_id | tag_id
1          | 11           <- product with ID 1 using tag with ID 11
1          | 22           <- product with ID 1 using tag with ID 22
2          | 22           <- product with ID 1 using tag with ID 22

我想通过sql请求检索以下结果:

product_id | tags
             // ↓ all tags those product with ID 1 using
1          | [{ "tagId": 11, "tagName": "tag1"}, { "tagId": 22, "tagName": "tag2"}]     
             // ↓ all tags those product with ID 2 using
2          | [{ "tagId": 22, "tagName": "tag2"}]

如果可能的话,请教我适当的语法。
我的数据库是mysql。

r1wp621o

r1wp621o1#

-- MySQL 8+ specific
select product.id product_id,
       json_arrayagg(json_object('tag_id', tag.id, 'tag_name', tag.name)) 
from map_product_tag
join product on map_product_tag.product_id = product.id
join tag on map_product_tag.tag_id = tag.id
group by product_id;
-- MySQL 5+ compatible
select product.id product_id,
       CONCAT('[', GROUP_CONCAT(json_object('tag_id', tag.id, 'tag_name', tag.name)), ']')
from map_product_tag
join product on map_product_tag.product_id = product.id
join tag on map_product_tag.tag_id = tag.id
group by product_id;

小提琴

相关问题