我有三个不同的表,它们具有以下结构:
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),此查询也只返回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的解决方案有效,所以谢谢你: - )
答案 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
答案 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
的别名