我有三个表格:items
、junction
和 properties
。我有五个物品(A到E)和五个属性(1到5)。通过连接表格,我已经分配了属性如下:
A: 1, 3, 5
B: 1, 2, 3
C: 1, 4, 5
D: 1, 2, 3
E: 1, 4, 5
当我运行以下查询时,我得到了一个美好的十五条记录的笛卡尔积(正如人们所期望的)。
SELECT I.id, I.item_name, P.property_name FROM scratch.items I
JOIN scratch.junction J ON J.item_id = I.id
JOIN scratch.property P ON J.property_id = P.id;
我想做的是将每个项目的属性名称连接成一个字段,以便我可以像这样输出它们:
Record | item_id | item_name | properties
----------------------------------------------------------------------------
0 | A | Item A | Property 1, Property 3, Property 5
1 | B | Item B | Property 1, Property 2, Property 3
2 | C | Item C | Property 1, Property 4, Property 5
3 | D | Item D | Property 1, Property 2, Property 3
4 | E | Item E | Property 1, Property 4, Property 5
----------------------------------------------------------------------------
与我在这里举的人为例子不同,每个项目都可以有任意数量的属性(包括零个)。
find_in_set()
进行连接以获得性能。做group_concat()
来进行漂亮的打印是一回事,但期望一个经过良好调整的数据库引擎根据漂亮打印的输出获取数据则是另一回事。 - Drew