我有三张桌子:
Apples
ID|Name
1 |Granny
2 |Red
3 |Delicious
Pies
ID|Name|Apple_ID|Maker_ID
1 |Pie |1 |1
2 |Pie2|1 |2
3 |Pie3|1 |3
4 |Pie4|2 |1
Makers
ID|Name
1 |Jeff
2 |Jerry
3 |Jeremy
正如你所看到的,一个苹果可以在三个不同的馅饼中,但与不同的制造商有关。 我想要一个我准备以CSV格式导出的查询,执行以下操作:
我希望每行获得一个苹果,列中包含苹果ID,名称和制造商名称,但不是两个表之间的“临时”链接,Pies。像这样:
Granny, Jeff, Jerry, Jeremy
Red, Jeff
等...我知道我可以对所有馅饼进行一次查询,然后对所有制造商进行另一次查询,但我想知道是否有办法将最后一个表中的值连接起来,好像它们在同一个“行”中一样。我也知道我可以拥有许多具有相同值的行,但是它为那些只想看苹果的人准备,并且知道谁从中制作了一个馅饼,而不是扫描多行。
感谢您的帮助!
答案 0 :(得分:4)
SELECT CONCAT( Apples.name, ', ', GROUP_CONCAT(Makers.name SEPARATOR ', ') )
FROM Apples
JOIN Pies ON (Pies.Apple_ID = Apples.ID)
JOIN Makers ON (Makers.ID = Pies.Maker_ID)
GROUP BY Apples.name
查看GROUP_CONCAT()
手册页。摆弄其参数以根据需要格式化其输出。