我有以下簡化表食譜:的MySQL:查詢,以獲得使用所有給定的成分
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);
這給了我:「ERROR 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);
這給「ERROR 1146(42S02):表 'recipedb.t' 不存在」
我想避免創建臨時表,包括使用ENGINE = MEMORY。
在你的例子中,你引用了一個名爲THEME的表。我不知道那是什麼,所以我沒有在我的答案中提到它。如果它很重要,請在您的問題中添加詳細信息。 – MJB 2010-06-10 14:03:57
您看到的錯誤有一個簡單的修復,在派生查詢後添加一個名稱。 SELECT recipe_id FROM ... JOIN(SELECT ...)name_it_here USING ... – 2010-06-11 13:17:35