在MySQL 5.0中,為什么嘗試在FROM子句中創(chuàng)建帶有子查詢的視圖時會發(fā)生以下錯誤?錯誤1349(HY000):視圖的SELECT在FROM子句中包含一個子查詢?nèi)绻@是MySQL引擎的限制,那么為什么他們還沒有實現(xiàn)此功能呢?此外,對于此限制有哪些好的解決方法?是否有任何變通方法可用于FROM子句中的任何子查詢,或者是否存在某些無法在FROM子句中使用子查詢無法表達(dá)的查詢?查詢示例(已包含在注釋中):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
3 回答

互換的青春
TA貢獻(xiàn)1797條經(jīng)驗 獲得超6個贊
我有同樣的問題。我想創(chuàng)建一個視圖來顯示最近一年的信息,該視圖從一張記錄了2009年至2011年記錄的表格中顯示。這是原始查詢:
SELECT a.*
FROM a
JOIN (
SELECT a.alias, MAX(a.year) as max_year
FROM a
GROUP BY a.alias
) b
ON a.alias=b.alias and a.year=b.max_year
解決方案概述:
為每個子查詢創(chuàng)建一個視圖
用這些視圖替換子查詢
這是解決方案查詢:
CREATE VIEW v_max_year AS
SELECT alias, MAX(year) as max_year
FROM a
GROUP BY a.alias;
CREATE VIEW v_latest_info AS
SELECT a.*
FROM a
JOIN v_max_year b
ON a.alias=b.alias and a.year=b.max_year;
它在mysql 5.0.45上運(yùn)行良好,沒有太多的速度損失(與執(zhí)行沒有任何視圖的原始子查詢select相比)。
添加回答
舉報
0/150
提交
取消