私はレシピを作成するためのクエリを作成しようとしている単純なレシピデータベースを持っています。関連する成分とステップ。レシピ自体は原料との多対多の関係(原料成分の再利用を促進する)とステップとの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"
私たちにいくつかのデータとあなたが望む結果を教えてください。また、あなたの 'INNER JOIN'を' duplicated data'で見せてください。私たちもそれを修正できます。 sqlFiddle.comで作業サンプルを作成することができます。 'Text to DDL'を使用してdbスキーマをロードする –
@JuanCarlosOropezaがさらに情報を追加しましたが、Thorstenの答えで判断すると、これを2つのクエリに分ける方が良いと思います。 –