MySql查询,组合表

时间:2009-04-17 21:00:16

标签: mysql

我有两个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

这有可能吗?

2 个答案:

答案 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