我有三张桌子:
ITEMS
itemid | itemname
1 | Item 1
FEATURES
featureid | featurename
1 | feature1
2 | feature2
3 | feature3
4 | feature4
... | ...
ASSIGN
assignid | itemid | featureid
1 | 1 | 1
1 | 1 | 2
1 | 1 | 3
1 | 1 | 4
我想要一个能给我类似结果的查询:
ITEMS
itemid | itemname | featurename1 | featurename2 | etc
1 | Item 1 | feature1 | feature2 | etc
有没有办法在没有第二个查询的情况下执行此操作?我发誓我只是以错误的方式思考它?有什么想法吗?
注意:功能可以是0到50种不同功能。我的数据库设计可能错了吗?
答案 0 :(得分:2)
使用ASSIGN表链接它们,然后您可以使用GROUP_CONCAT()
来执行您想要的操作。试试这个:
SELECT
ITEMS.itemid,
ITEMS.itemname,
FEATURES.featureid,
GROUP_CONCAT(FEATURES.featurename) AS FEATURES
FROM ITEMS
JOIN ASSIGN ON ITEMS.itemid = ASSIGN.itemid
JOIN FEATURES ON FEATURES.featureid = ASSIGN.featureid
答案 1 :(得分:0)
只需使用ASSIGN表作为ITEMS和FEATURES的交叉参考。因此,通过ASSIGN表中的外键将所有内容连接在一起,如下所示:
SELECT
ITEMS.itemid
, ITEMS.itemname
, FEATURES.featureid
, FEATURES.featurename
, ASSIGN.assignid
FROM `ITEMS`
JOIN `ASSIGN`
ON ITEMS.itemsid = ASSIGN.itemid
JOIN `FEATURES`
ON FEATURES.featureid = ASSIGN.featureid