MySQL:如何使用分配表在一个查询中连接三个表?
问题描述:
我有三个表: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种不同功能的任何功能。我的数据库设计可能是错误的?
答
链接他们使用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
答
只需使用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
[见这也许有用(http://stackoverflow.com/questions/5196371/sql-query-concatenating-results-into-one-string) – mojtaba 2013-04-25 18:52:16
如果项目只有例如。 featureid 3和4分配给它(但不是1或2),那么你希望它的特性出现在'featurename3'和'featurename4'(匹配featureid)列中,或者在'featurename1'和'featurename2'列中出现。从左到右填充列)? – 2013-04-25 19:00:35
为什么所有'assignid'值'1'?这是一个错字吗? – 2013-04-25 19:01:54