习惯用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...