更有效的方法来寻找每种可能的组合



这对我来说很难解释,我试图获得所有可能的数字组合,而仅将数字一起使用一次,例如,如果我有数字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

相关内容

  • 没有找到相关文章

最新更新