2016-03-31 15 views
0

私はレシピを作成するためのクエリを作成しようとしている単純なレシピデータベースを持っています。関連する成分とステップ。レシピ自体は原料との多対多の関係(原料成分の再利用を促進する)とステップとの1対多の関係(あるレシピは別のレシピと同じステップを持っていないので、必要はありませんここで再使用するため)。SQLite - 多対多と多対多のジョインで選択

データベースはそうのような設定です:

CREATE TABLE Recipe (
    _id INTEGER PRIMARY KEY, 
    recipe_name TEXT UNIQUE NOT NULL 
); 

CREATE TABLE Ingredient (
    _id INTEGER PRIMARY KEY, 
    ingredient TEXT UNIQUE NOT NULL 
); 

CREATE TABLE RecipeIngredient (
    _id INTEGER PRIMARY KEY, 
    recipe_id INTEGER, 
    ingredient_id INTEGER, 
    amount REAL, 
    FOREIGN KEY (recipe_id) REFERENCES Recipe(_id), 
    FOREIGN KEY (ingredient_id) REFERENCES Ingredient(_id) 
); 

CREATE TABLE Step (
    _id INTEGER PRIMARY KEY, 
    instruction TEXT NOT NULL, 
    number INTEGER NOT NULL, 
    recipe_id INTEGER, 
    FOREIGN KEY (recipe_id) REFERENCES Recipe(_id) 
); 

私はINNERは(重複データのトンを作成する)すべてのテーブルにJOINを使用して_idによって与えられたレシピのためにすべての情報を引き出すことができますよ、しかし、私が立ち往生しているところでは、意味のあるオブジェクトを得るために結果をさらに解析することなく、データを有効にするためにこれをグループ化/順序付けする方法はありますか?これは、2つのクエリ(1つは成分用、もう1つはステップ用)で行う方が良いでしょうか?これを考える場合

|| recipe || || ingredient|| ||step|| ||step number|| 
"Recipe One" "Ingredient 1" "Step 1"   "1" 
"Recipe One" "Ingredient 1" "Step 2"   "2" 
"Recipe One" "Ingredient 1" "Step 3"   "3" 
"Recipe One" "Ingredient 2" "Step 1"   "1" 
"Recipe One" "Ingredient 2" "Step 2"   "2" 
"Recipe One" "Ingredient 2" "Step 3"   "3" 
"Recipe One" "Ingredient 3" "Step 1"   "1" 
"Recipe One" "Ingredient 3" "Step 2"   "2" 
"Recipe One" "Ingredient 3" "Step 3"   "3" 
+0

私たちにいくつかのデータとあなたが望む結果を教えてください。また、あなたの 'INNER JOIN'を' duplicated data'で見せてください。私たちもそれを修正できます。 sqlFiddle.comで作業サンプルを作成することができます。 'Text to DDL'を使用してdbスキーマをロードする –

+0

@JuanCarlosOropezaがさらに情報を追加しましたが、Thorstenの答えで判断すると、これを2つのクエリに分ける方が良いと思います。 –

答えて

2

UPDATE

(成分/ステップ番号順)INNERは、テーブル間の結合やって、1つのレシピIDを選択するから戻ってきたいくつかのサンプルデータを追加しますこれをすべて1つのクエリーに入れることは意味がないことに気づくでしょう。あなたはどんな結果を期待しますか?ステップ1:オーブンを加熱し、成分は砂糖、小麦粉、ミルクです。ステップ2:砂糖、小麦粉を混ぜる。砂糖、小麦粉、牛乳が成分となる。ステップ3:牛乳を加え、成分は砂糖、小麦粉、牛乳です。

あなたが実際に望むのは、成分のリスト(質問1)と取るべきステップ(質問2)です。

これらのクエリは問題ではないと思いますが、それらを組み合わせるかどうか、どのように組み合わせるかはちょっと混乱していました。答えは簡単です:しないでください。

さらに助けが必要な場合は教えてください。

+0

あなたは正しいです、「ステップ」は成分との関係がありません。別のケースは、「ステップ1の成分AとB」のようなものが必要な場合ですが、それはありません。 –

+0

これは私が考えていたものですが、私は数年間でSQLを使っていませんでしたし、間違いなく錆びていますので、質問すると傷つけないと思いました。迅速な答えをありがとう! –