2017-11-27 4 views
-1

テーブルのすべての行に含まれるすべての値を選択する必要があります。
私はテーブル「成分」とProductIngredientを持っています(そこには製品のレシピがあります)。
成分テーブルのすべての行に含まれる値を見つける

| ingredient_id | name | price | 
| 1    | Bla | 100 
| 2    | foo | 50 

ProductIngredient。

| Product_id | ingredient_id 
| 1   | 1 
| 1   | 2 
| 2   | 1 

がProductIngredientの全ての行にあるように出力が

| 1 | Bla | 

であるべきです。

SELECT DISTINCT Ingredient_Id 
FROM Ingredients I 
WHERE Ingredient_Id = ALL 
    (SELECT Ingredient_id FROM ProductIngredient PI 
    WHERE PI.Ingredient_Id = I.Ingredient_Id); 

コードを修正して動作させるにはどうすればよいですか?

+4

あなたの質問を編集し、サンプルデータと希望する結果を提供してください。あなたの質問文は明確ではありません。たとえば、この質問は1つのテーブルに関するものですが、サンプルコードは2つを参照しています。 –

+1

正しくタグ付けしてください!どちらですか?MySQLまたはPostgres ?????両方にすることはできません。 – Eric

答えて

0

これは、各製品のPIにあるIのすべての成分を与えます。これは、各製品が製品と成分の組み合わせに対して複数の行を持たないことを前提としています。

SELECT I.Ingredient_Id 
FROM Ingredients I INNER JOIN ProductIngredient PI 
    ON PI.Ingredient_Id = I.Ingredient_Id 
GROUP BY I.Ingredient_Id 
HAVING COUNT(*) >= (SELECT COUNT(DISTINCT Product_id) FROM ProductIngredient) 
+0

はい、しかし、私はすべての製品(PI)に含まれている私からその成分だけが必要です –

+0

あなたは各製品ごとにグループのような意味ですか?または、すべての製品に含まれる成分が欲しいですか? – clinomaniac

+0

ええ、すべての製品に含まれる成分(: –

関連する問題