2

我有三个不同的表,它们具有以下结构:

食物

ID | title
---+----------
1  | sandwich
2  | spaghetti

成分

ID  | food_reference | type | location | bought
----+----------------+------+----------+----------
100 | 1              | ham  | storeA   | 11-1-2013
101 | 1              | jam  | storeB   | 11-1-2013
102 | 2              | tuna | storeB   | 11-6-2013

标签

ID  | food_reference | tag 
----+----------------+-----
1000| 1              | Tag
1001| 1              | Tag2  
1002| 2              | fish 

并使用一个选择,我想从这三个表(标题、类型、位置、购买、标签)中获取一个特定 ID 的所有信息。我尝试过类似的东西

SELECT food.*,ingridients.*,tags.* FROM food  
            JOIN ingridients
                ON :id=ingridients.food_reference
            JOIN tags
                ON :id=tags.food_reference
            WHERE id=:id

但是,即使有两个匹配的行(ham 和 jam、Tag 和 Tag2),这个查询也只从 ingridients 和 tags 中返回 id=1 的一行。你能告诉我我做错了什么吗?

编辑:我尝试了 LolCoder 的解决方案,但我仍然只得到一个结果,即使在小提琴中它似乎有效。但是我尝试了:

 SELECT F.*, group_concat(I.type), group_concat(I.location), 
   group_concat(I.bought), group_concat(T.tag) 
 FROM feeds F 
 INNER JOIN ingridients I 
   ON :id = I.food_reference
 INNER JOIN tags T
   ON :id=T.food_reference
 WHERE F.id=:id 

这会从所有匹配的行中找到数据,但有几次,即我得到(对于 id=1)sandwich,ham,ham,ham,jam,jam,jam,tag,tag,tag,tag2,tag2,tag2

EDIT2:魔术发生了,LolCoder 的解决方案有效,所以谢谢你:-)

4

2 回答 2

1

试试这个查询:

SELECT food.*,ingridients.*,tags.* FROM food  
            JOIN ingridients
                ON food.id=ingridients.food_reference
            JOIN tags
                ON food.id=tags.food_reference
            WHERE food.id=1

检查SQLFIDDLE

于 2013-09-29T09:33:23.023 回答
-2

使用别名连接 as.column 名称

于 2013-09-29T09:24:28.027 回答