Если у вас есть фиксированный список питательных веществ, то вы можете использовать join
и group by
:
select f.food_id, f.title,
max(case when n.nutrient_id = 1 then n.amount end) as nutrient_1,
max(case when n.nutrient_id = 2 then n.amount end) as nutrient_2,
max(case when n.nutrient_id = 3 then n.amount end) as nutrient_3
from foods left join
nutrients n
on n.food_id = f.food_id
group by f.food_id, f.title;
Примечание: здесь используется left join
, если в ваших данных есть такие продукты, как Twinkies, которые не имеют известной питательной ценности.
Если вы не знаете полный список питательных веществ, то вы не знаете, какие столбцы находятся в наборе результатов. Я бы предложил использовать JSON или массивы для представления значений.