0

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

我希望我在这里试图完成的事情是有道理的..

4

2 回答 2

3
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 但顺序不同的序列)。

现在,如果我理解了这个问题,我们想从 recipe_index 中提取所有使用所有 Id 一次且仅一次的行组合。(注意,只使用一次所有id,这意味着配方的数量是 3 的倍数)。

于 2012-10-23T22:39:22.370 回答
1

我不知道这有多好,但可以完成这项工作:

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
于 2012-10-23T22:40:37.160 回答