MySQL 5.0檢視中FROM子句的子查詢:限制與解決方法
MySQL 5.0使用者在嘗試建立在FROM子句中包含子查詢的檢視時可能會遇到錯誤,錯誤訊息為「ERROR 1349 (HY000): View's SELECT contains a subquery in the FROM clause.」 此限制阻礙了基於包含子查詢的複雜查詢建立視圖。
一種可能的解決方法是為每個子查詢建立單獨的視圖,然後用這些派生視圖取代子查詢。考慮以下範例查詢:
SELECT temp.UserName FROM ( SELECT u1.name AS UserName, COUNT(m1.UserFromId) AS SentCount FROM Message m1, User u1 WHERE u1.uid = m1.UserFromId GROUP BY u1.name HAVING SentCount > 3 ) AS temp;
為了規避此限制,可以為兩個子查詢建立視圖:
CREATE VIEW v_user_sent_count AS SELECT u1.name AS UserName, COUNT(m1.UserFromId) AS SentCount FROM Message m1, User u1 WHERE u1.uid = m1.UserFromId GROUP BY u1.name; CREATE VIEW v_users_sent_over_3 AS SELECT UserName FROM v_user_sent_count WHERE SentCount > 3;
在原始查詢中,用衍生視圖取代子查詢:
SELECT UserName FROM v_users_sent_over_3;
這種方法允許在存在FROM子句中子查詢限制的MySQL版本中,基於複雜的子查詢建立視圖。但是,需要注意的是,並非所有子查詢都可以不放在FROM子句中表達。例如,用於排序或篩選的子查詢可能需要其他方法,例如使用相關子查詢或視窗函數。
以上是MySQL FROM 子句中的檢視與子查詢:如何克服 5.0 的限制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!