MySQL:如何在一个查询中使用assign表连接三个表?

时间:2013-04-25 18:41:07

标签: mysql

我有三张桌子:

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种不同功能。我的数据库设计可能错了吗?

2 个答案:

答案 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

SQL Fiddle link

答案 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