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 は既に 1 回使用しているので、他のすべての組み合わせは必要ありません。

これは私が現在使用しているコードです。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 から取得した 3 つの ID のすべての組み合わせが生成されます (重複を考慮して、同じ ID のシーケンスが異なる順序で含まれている場合)。

ここで、問題が理解できたら、recipe_index から、すべての ID を一度だけ使用するすべての行の組み合わせを取り出したいと考えています。(すべてのID を 1 回だけ使用することに注意してください。これは、レシピの数が 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 に答える