2017-08-25 308 views
0
SELECT branches.brid, 
COALESCE(a.cnt, 0) AS Assigned, 
COALESCE(c.cnt, 0) AS Completed, 
COALESCE(p.cnt, 0) AS Pending, 
COALESCE(x.cnt, 0) AS Expired 
FROM branches WHERE access = 'User' 
LEFT JOIN 
(SELECT brid, count(*) from task GROUP BY brid) a ON branches.brid = a.brid 
LEFT JOIN 
(SELECT brid, count(*) from task WHERE stat = 'Completed' GROUP BY brid) c ON branches.brid = c.brid 
LEFT JOIN 
(SELECT brid, count(*) from task WHERE stat = 'Pending' GROUP BY brid) p ON branches.brid = p.brid 
LEFT JOIN 
(SELECT brid, count(*) from task WHERE stat = 'Expired' GROUP BY brid) x ON branches.brid = x.brid 
ORDER BY branches.brid ASC; 

我得到這個錯誤,當我創建視圖有沒有辦法做到這一點?此查詢工作,但我不能在我的數據庫中創建視圖MYSQL - 不能創建視圖

ERROR 1349(HY000):視圖的SELECT包含在FROM子句中

+0

儘量把'where'後加入 – N1gthm4r3

+0

怎麼樣?我不知道該怎麼辦 – James

回答

1

子查詢的錯誤或多或少解釋本身。

這裏是從documentation的摘錄,你需要運行MySQL 5.7.7或更新的版本能在一個視圖中使用子查詢。

視圖定義是受到以下限制:

的MySQL 5.7.7之前,SELECT語句不能包含在一個子查詢 FROM子句。 ....

你或許可以重寫查詢以這樣的事:

SELECT branches.brid, 
COUNT(t.stat) AS Assigned, 
SUM(CASE WHEN t.stat = 'Completed' THEN 1 ELSE 0 END) AS Completed, 
SUM(CASE WHEN t.stat = 'Pending' THEN 1 ELSE 0 END) AS Pending, 
SUM(CASE WHEN t.stat = 'Expired' THEN 1 ELSE 0 END) AS Expired 
FROM branches 
LEFT JOIN task t ON branches.brid = t.brid 
WHERE access = 'User' 
GROUP BY branches.brid 
ORDER BY branches.brid ASC; 
+0

錯誤1064(42000):您的SQL語法有錯誤;檢查對應於你的MariaDB服務器版本的手冊,在右邊語法附近使用'LEFT JOIN任務t ON branches.brid = t.brid GROUP BY branches.brid ORDER BY branc'at line 7 – James

+0

我得到這個錯誤 – James

+0

我糾正了這一點,但你需要能夠自己糾正這些問題。我沒有你的模式,所以我可能無法做出你需要的100%正確的查詢。 – nos