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 - 无法创建视图的主要内容,如果未能解决你的问题,请参考以下文章

mysql 视图

MySQL 5.6 使用 unicode 字符集创建视图

Mysql 无法创建/写入文件错误#13

mysql多表查询并创建视图

mysql(二)

使用子查询的替代方法 - 无法在 Mysql 中创建视图