MYSQL - 无法创建视图
Posted
技术标签:
【中文标题】MYSQL - 无法创建视图【英文标题】:MYSQL - cant create view 【发布时间】:2017-08-25 06:22:29 【问题描述】: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;
创建视图时出现此错误,有什么方法可以做到这一点吗?此查询有效,但我无法在我的数据库中创建视图
ERROR 1349 (HY000): View 的 SELECT 在 FROM 子句中包含子查询
【问题讨论】:
尝试在加入后输入where
怎么样?我不知道该怎么办
【参考方案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;
【讨论】:
ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 7 行的“LEFT JOIN task t ON branches.brid = t.brid GROUP BY Branches.brid ORDER BY branc”附近使用正确的语法 我已经纠正了这一点,但您需要能够自己纠正这些事情。我没有你的架构,所以我可能无法做出你需要的 100% 正确的查询。 ***.com/questions/45874340/… 我在那个链接中有我的架构截图,我是 mysql 中的新手 感谢您救了我的命:>以上是关于MYSQL - 无法创建视图的主要内容,如果未能解决你的问题,请参考以下文章