我如何将不同SQL表的内容“添加”在一起?

时间:2015-03-22 21:31:45

标签: sql

很抱歉,如果这是一个奇怪的问题,或者它已经在堆栈中得到了回答......我只是想不出一种方法来解释它是什么我实际上试图做。

基本上,假设您有两个SQL表,包含两个不同的配方。

表1有:

  • 2土豆
  • 1胡萝卜
  • 200克面粉

表2有:

  • 1个马铃薯
  • 3芹菜棒
  • 100克面粉

因此将这两个表的结果加在一起将是:

  • 3个土豆
  • 1胡萝卜
  • 3芹菜棒
  • 300克面粉

您如何将这些表格一起添加?将这些数据存储在不同的SQL表中是个好主意还是坏的?很高兴其他/更好的方式来存储数据。

任何帮助将不胜感激:)

(关于SO的第一篇文章,对不起,如果这是一个糟糕的问题)

1 个答案:

答案 0 :(得分:2)

将这些东西存储在2个表中是一个坏主意。更好的数据库设计将是

ingredients table
-----------------
id
name
...


recipes table
--------------
id
name
description
...


units table
-----------
id
name


recipes_ingredients table
--------------------------
recipe_id
ingredient_id
amount_value
amount_unit_id

然后获取特定食谱的所有成分,你可以做到

select i.name, ri.amount_value, u.name
from recipes r
join recipes_ingredients ri on ri.recipe_id = r.id
join units u on ri.amount_unit_id = u.id
join ingredients i on ri.ingredient_id = i.id
where r.name = 'Pizza'

如果您只想获得不同的成分,那么您可以按

进行分组
select i.name as ingredient, 
       sum(ri.amount_value) as total_amount, 
       u.name as unit
from recipes r
join recipes_ingredients ri on ri.recipe_id = r.id
join units u on ri.amount_unit_id = u.id
join ingredients i on ri.ingredient_id = i.id
where r.name = 'Pizza'
group by i.name, u.name