mysql使用一个id从三个表中获取数据

时间:2013-09-29 09:21:53

标签: mysql select

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

食品

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

Ingridients

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),此查询也只返回id = 1的一行来自ingridients和tags。你能告诉我我做错了什么吗?

编辑:我尝试过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)  三明治,火腿,火腿,火腿,果酱,果酱,果酱,标签,标签,标签,TAG2,TAG2,TAG2

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

SELECT f.title, i.type, i.location, i.bought, t.tag
FROM Food as f 
LEFT JOIN Ingridients AS i ON (f.ID = i.food_reference)
LEFT JOIN Tags AS t ON (f.ID = t.food_reference)
WHERE f.ID = 1

答案 2 :(得分:-2)

使用带有连接as.column name

的别名