我正在努力编写查询以从这样的表中获取数据:
id food_id ingre_id
1 1 13
2 1 9
3 2 13
4 3 5
5 4 9
6 4 10
7 5 5
假设在该表中,每个food
只有1或2个ingre id。然后我想要一张这样的表:
item_id ingre1_id ingre2_id
1 13 9
2 13 null //any food that have 1 ingre then set ingre2_id to null
3 5 null
4 9 10
5 5 null
请建议我进行此类转换的查询。谢谢!
答案 0 :(得分:0)
您可以使用聚合。如果您不关心连续排序:
select food_id, min(ingred_id) as ingred1_id,
(case when min(ingred_id) <> max(ingred_id) then max(ingred_id) end) as ingred2_id
from t
group by food_id;
注意:min()
/ max()
的使用特别有效,因为您有两个值。如果您有更多值,请使用适当的数据询问另一个问题。
答案 1 :(得分:0)
这应该产生你要求的东西:
SELECT
a.`food_id` as `item_id`,
a.`ingre_id` as `ingre1_id`,
b.`ingre_id` as `ingre2_id`
FROM `food` a
LEFT JOIN `food` b
ON a.`id` <> b.`id` AND a.`food_id` = b.`food_id`
WHERE a.`id` < b.`id` OR b.`id` IS NULL
GROUP BY a.`food_id`