这对我来说很难解释,我试图获得所有可能的数字组合,而仅将数字一起使用一次,例如,如果我有数字1 1通过10,希望以3:
组为单一的组合1,2,3
4,5,6
7,8,9
这些很好,但是我目前在一些桌子上加入笛卡尔,所以对于我得到的第一组:
1,2,3
3,2,1
1,3,2
2,3,1
2,1,3
等...由于我已经使用过1,2,3一次,所以我不想要它的所有其他组合。
这是我当前使用的代码,我不确定如何在SQL中做我想做的事情。ID1,ID2,ID3是我试图找到所有可能组合的3个数字。
INSERT INTO recipe_index
SELECT distinct '3' as nummeals, t1.id as id1, t2.id as id2, t3.id as id3,
t1.calories+t2.calories+t3.calories as calories, t1.protein+t2.protein+t3.protein as
protein, t1.carbohydrate+t2.carbohydrate+t3.carbohydrate as carbohydrate,
t1.fat+t2.fat+t3.fat as fat from recipes t1, recipes t2, recipes t3
我希望我想在这里完成的工作有意义。
INSERT INTO recipe_index
SELECT t1.Id as t1Id, t2.id as t2Id, t3.id as T3id
t1.calories+t2.calories+t3.calories as calories,
t1.protein+t2.protein+t3.protein as protein,
t1.carbohydrate+t2.carbohydrate+t3.carbohydrate as carbohydrate,
t1.fat+t2.fat+t3.fat as fat
FROM recipes t1
JOIN recipes t2 on T2.id < t1.Id
JOIN recipes t3 on t3.id < t2.id
这将产生所有配方ID中三个ID的所有组合,而无需产生任何重复(如果我们考虑重复以还包括相同的ID序列,但按不同的顺序包括)。
。现在,如果我理解问题,我们想退出Repipe_index所有使用所有ID的行的组合。(请注意,完全使用 all iD一次,仅一次,这意味着配方的数量是3的倍数)。
我不知道这有多好,但是要加工工作:
INSERT INTO recipe_index
SELECT distinct '3' as nummeals, t1.id as id1, t2.id as id2, t3.id as id3,
t1.calories+t2.calories+t3.calories as calories, t1.protein+t2.protein+t3.protein as
protein, t1.carbohydrate+t2.carbohydrate+t3.carbohydrate as carbohydrate,
t1.fat+t2.fat+t3.fat as fat from recipes t1 inner join recipes t2 on t1.Id < t2.Id inner join recipes t3 on t2.Id < t3.Id