mysql 创建视图出现1349 View's SELECT contains a subquery in the FROM clause解决办法

习惯用oracle创建视图,最近在mysql下创建视图出现以下错误:

查询:CREATE or replace VIEW view_order_summary AS select a.opuser,a.audit_status,a.total,b.atotal,round(a.total/b.atotal,2) rate from...

错误代码: 1349
View's SELECT contains a subquery in the FROM clause

执行耗时   : 0 sec
传送时间   : 0 sec
总耗时      : 0.002 sec

原因是mysql不支持子查询,现解决办法就是把子查询分成多个视图,然后再把其它视图当表一样关联查询。

原出错语句:

CREATE OR REPLACE VIEW view_back_summary AS
SELECT a.opuser,a.audit_status,a.total,b.atotal,ROUND(a.total/b.atotal,2) rate FROM (
SELECT t.`OPUSER`,t.`AUDIT_status`,COUNT(1) total FROM back_form t GROUP BY t.`AUDIT_status`,t.`OPUSER`) a ,(
SELECT o.`OPUSER`,COUNT(1) atotal FROM back_form o GROUP BY o.`OPUSER`) b WHERE a.opuser = b.opuser;

修改后的语句:

CREATE VIEW view_back_1 AS
SELECT t.`OPUSER`,t.`AUDIT_status`,COUNT(1) total FROM back_form t GROUP BY t.`AUDIT_status`,t.`OPUSER`;

CREATE VIEW view_back_2 AS
SELECT o.`OPUSER`,COUNT(1) atotal FROM back_form o GROUP BY o.`OPUSER`;

CREATE OR REPLACE VIEW view_back_summary AS
SELECT a.opuser,a.audit_status,a.total,b.atotal,ROUND(a.total/b.atotal,2) rate FROM view_back_1 a, view_back_2 b WHERE a.opuser = b.opuser;

SELECT * FROM view_back_summary;

语法说明如下。 <视图名>:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。 <SELECT语句>:指定 创建视图 的 SELECT 语句,可用于 查询 多个基础表或源视图。 对于 创建视图 中的 SELECT 语句的指定存在以下限制: 用户除了拥有 CREATE VIEW 权限外,还具有操作中涉及的基础表和其他视图的相关权限。 SELECT 语句不能引用系统或用户变量。 SELECT 语句不能 包含 FROM 子句中的子查 视图将 查询 的结果创建为一个视图。在视图中没有数据,只有 查询 语句,当需要通过 查询 视图中的数据时,根据 查询 语句到实际的表中 查询 到数据并显示。语法: 创建视图 例子:使用:SELECT * FROM empinfo视图中没有数据,只有 创建视图 时的SQL语句定义。在使用视图时才会去执行SQL语句, 查询 实际的数据。将多表 查询 定义为视图,可以大大方便实际 查询 的日常使用。使用视图不方便修改数据,容易出错,视图一般用... 在 MySQL 中创建一个视图可以通过使用 CREATE VIEW 语句来完成。视图是基于一个或多个表的 查询 结果,它类似于虚拟表,可以像表一样 查询 和使用。请注意,视图并不存储实际的数据,它只是一个定义的 查询 。每当 查询 视图时, MySQL 会实时执行基础 查询 并返回结果。首先,确定要使用的基础表和 查询 条件。最后,执行 创建视图 的语句。 从SQL的角度来看,视图和表是相同的,两者的区别在于表中存储的是实际的数据,而视图中保存的是SELECT语句(视图本身并不存储数据)。 使用视图可以轻松完成跨多表 查询 数据等复杂操作。 视图中不能 包含 ORDER BY和对视图的更新操作(INSERT、DELETE、UPDATE) 1.1 创建视图 方法 CREATE VIEW 视图名称(<视图列名1><视图列名2><视图列名 我按照最初的方式先把SQL整理出来后,结果 mysql 建视图时报错了: 下面是最初的方案, CREATE OR REPLACE VIEW view_systeminfo_detail SELECT f.filesystemSize, f.used, f.unUsed, c.total... credit_orders(id, client_id, number_of_credits, payment_status)credit_usage(id, client_id, credits_used, date)我使用下面的 查询 来做到这一点。没有“ 创建视图 ”部分的 查询 运行良好,但使用“ 创建视图 ”时,它显示错误“视图的SELECT 包含 FROM子句中的 子查询 ”。可能是什么问题&可能的解... 习惯用oracle 创建视图 ,最近在 mysql 创建视图 出现以下错误: 查询 :CREATE or replace VIEW view_order_summary AS select a.opuser,a.audit_status,a.total,b.atotal,round(a.total/b.atotal,2) rate from...错误代码: 1349View's SELECT contains... 原文链接: mysql 创建视图 1349View’s SELECT contains a subquery in the FROM clause 解决 办法 之前用oracle数据库, 创建视图 并没有遇见什么问题,在 mysql 同样的sql却出现报错。 报错信息:1349 View’s SELECT contains a subquery in the FROM clause 执行耗时 : 0 sec 视图的定义 视图是一个虚拟的表,不同于直接操作数据表,视图是依据SELECT语句来创建的,所以操作视图时会根据 创建视图 的SELECT语句生成一张虚拟表,然后在这张虚拟表上做SQL操作。 视图与表的区别 视图与表的区别在于是否保存了实际的数据。所以视图并不是数据库真实存储的数据表,它可以看作是一个窗口,通过这个窗口我们可以看到数据库表中真实存在的数据。所以我们要区别视图和数据表的本质,即视图是基于真实表的一张虚拟的表,其数据来源均建立在真实表的基础上。 我想使用 子查询 MySQL 创建视图 CREATE OR REPLACE VIEW `V_TASK_TRANSFER` (`REF_ID`, `DATE_CREATE`, `DATE_TRX`,`ACCOUNT_NO`, `TO_ACCOUNT_NO`, `TO_NAME`, `CURRENCY_CODE`, `AMOUNT`,`TASK_TYPE`, `NAME_E`, `NAME_I`, `RE...