2012-05-01 78 views
-1

我完全失去了這一點。我不斷收到錯誤子查詢返回多行。有任何想法嗎?棘手的MySQL錯誤:子查詢返回多個行

SELECT 
    m.MealID, m.Title, m.SeoUrl, m.Likes, 
    (SELECT Photo FROM Recipe WHERE RecipeID= 
     (SELECT r1.RecipeID FROM Ref_Meal r1 
     LEFT OUTER JOIN Ref_Meal r2 ON r1.MealID=r2.MealID AND r1.Sort > r2.Sort 
     WHERE r1.MealID=m.MealID AND r2.MealID IS NULL)) as Photo, 
    (SELECT MAX(rs.Skill) FROM Recipe rs JOIN Ref_Meal rms ON rms.RecipeID=rs.RecipeID WHERE rms.MealID=m.MealID) as Skill 
FROM Meal m 
JOIN MemberMealBookmark b ON b.MealID=m.MealID 
WHERE b.MemberID=4 ORDER BY Title 
+0

您應該重新格式化您的查詢,因此它不是全部在一行上。除非你更清楚它正在做什麼,否則我們無法分類這件事。 – Cylindric

+0

如果您逐個手動運行每個子查詢,那麼它們中的任何一個都會返回多個行嗎? – Cylindric

+1

在定義'Photo'列的子子查詢中的WHERE條件導致所有'MealID'在整個子查詢中都是'NULL',並且由於'm.MealID'上的匹配,整個父查詢也是如此。這是你的意圖嗎? – eggyal

回答

0

這是非常難以調試此查詢無模式,但看看這個條件在WHERE:

WHERE RecipeID= 
     (SELECT r1.RecipeID FROM Ref_Meal r1 
     LEFT OUTER JOIN Ref_Meal r2 ON r1.MealID=r2.MealID AND r1.Sort > r2.Sort 
     WHERE r1.MealID=m.MealID AND r2.MealID IS NULL)) as Photo, 

你,因爲你使用的是EQUAL收到此錯誤,但查詢返回的不止一行。 通常,當你遇到這種情況時,這是因爲你的子查詢中有一個錯誤,你認爲只會有一個結果,但還有更多。 複製粘貼該查詢並運行它,它將返回多於一行。

修復子查詢返回單行或將EQUAL標誌更改爲IN,它將處理多個結果。