我有两个MySql表,一个包含食物,另一个包含食谱(食物组)。食谱表有一个标题,然后有一个项目表,包含该食谱中的所有食物。该表与食物表相关联。现在我需要将这些表组合在一起并将它们列为togheter。
食品表:
foodid | title | calories 1 banana 100 2 apple 50
配方表:
recipeid | title 1 fruit-mix
Receipe项表:
receipeitemid | recipeid | foodid 1 1 1 2 1 2
我需要将它们组合到一个包含同一列表中的食物和食谱的列表中。所以在上面的例子中,我需要一个这样的列表:
title | foodid | recipeid | calories banana 1 null 100 apple 2 null 50 fruit-mix null 1 150
这有可能吗?
答案 0 :(得分:6)
您使用名为UNION
的内容union的问题是所有表必须具有相同的字段。但是您可以在SELECT查询中添加假字段以获得所需的结果。对于大型桌子,它可能会很慢。
SELECT title, foodid, NULL as recipeid, calories FROM Food-table
UNION
SELECT title, NULL as foodid, recipeid, calories FROM Recipe-table
但你应该真正研究JOINS,因为那里有一个链接表。
答案 1 :(得分:4)
SELECT title, foodid, null, calories
FROM Food
UNION
SELECT r.title, null, r.recipeid, sum(calories)
FROM recipe r
INNER JOIN RecipeItem ri ON ri.recipeid=r.recipeid
INNER JOIN Food f ON f.foodid=ri.foodid
GROUP BY r.title, r.recipeid