0

我有三张桌子:

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 个不同的特征。我的数据库设计可能是错误的吗?

4

2 回答 2

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

SQL 小提琴链接

于 2013-04-25T18:55:10.060 回答
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
于 2013-04-25T18:47:46.950 回答