私は料理本を作ろうとしていますが、重複に問題があります。一例で理解することが容易になり、それでは始めましょうます:MySQLグループは、他のデータを失うことなくIDを複写します。
私のテーブルは次のようになります。
SELECT r.name AS 'Recipe',
r.instructions,
ri.amount AS 'Amount',
mu.name AS 'Unit of Measure',
i.name AS 'Ingredient'
FROM Recipe r
JOIN RecipeIngredient ri on r.id = ri.recipe_id
JOIN Ingredient i on i.id = ri.ingredient_id
LEFT OUTER JOIN Measure mu on mu.id = measure_id;
I:
create table Recipe (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(25),
description VARCHAR(50),
instructions VARCHAR(500))
ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table Ingredient (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50))
ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table Measure (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30))
ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table RecipeIngredient (
recipe_id INT NOT NULL,
ingredient_id INT NOT NULL,
measure_id INT,
amount INT,
CONSTRAINT fk_recipe FOREIGN KEY(recipe_id) REFERENCES Recipe(id),
CONSTRAINT fk_ingredient FOREIGN KEY(ingredient_id) REFERENCES Ingredient(id),
CONSTRAINT fk_measure FOREIGN KEY(measure_id) REFERENCES Measure(id))
ENGINE=InnoDB DEFAULT CHARSET=utf8;
をし、私はこのようなクエリを実行すると「は、この結果になっM:
問題があるということをCたとえそれがちょうど1つ以上の成分を持っているのと同じレシピであっても、ホコリケーキは複製しています。あなたは私がこの問題を解決するのを助けてください、私はレシピの1つのインスタンスを得るでしょうか?
あなたは十分な情報を提供していません。レシピごとに1行しか必要としないとしたら、どのように表示するのですか?のように、測定単位、成分、および量の列はどうなりますか? –
混乱して申し訳ありません。私が得たいのは、すべての成分を含むレシピの1つのインスタンスです。それも可能ですか? – Deividas
ええ、あなたはGROUP BY句とCONCAT関数を見たいと思います。 –