私は次の簡略化されたテーブルを持っています:
CREATE TABLE recipe(id int, name varchar(25));
CREATE TABLE ingredient(name varchar(25));
CREATE TABLE uses_ingredient(recipe_id int, name varchar(25));
チキンとクリームの両方を含むレシピのすべてのIDを返すクエリを作成したいと思います。
私が試してみました
SELECT recipe_id FROM uses_ingredient INNER JOIN
(SELECT * FROM ingredient WHERE name="Chicken" OR name="Cream")
USING (name) GROUP BY recipe_id
HAVING COUNT(recipe_id) >= (SELECT COUNT(*) FROM theme);
これは私に:「エラー1248(42000):すべての派生テーブルは独自のエイリアスを持っている必要があります」 とおそらく間違っています。
次にやってみました
SELECT recipe_id FROM
(SELECT * FROM ingredient WHERE name="Chicken" OR name="Cream") AS t
INNER JOIN uses_ingredient USING (name)
GROUP BY recipe_id HAVING
COUNT(recipe_id)>= (SELECT COUNT(*) FROM t);
これにより、「エラー1146(42S02):テーブル'recipedb.t'が存在しません」が表示されます。
ENGINE=MEMORYの使用を含む一時テーブルの作成を避けたい。