`
dove19900520
  • 浏览: 599627 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql 视图不支持子查询的解决办法

阅读更多

今天领导让我写一个视图,需要把三张没有任何关联关系的表数据整合到一张视图上,

我按照最初的方式先把SQL整理出来后,结果mysql建视图时报错了:

下面是最初的方案,

CREATE OR REPLACE VIEW view_systeminfo_detail 
AS 
SELECT
	f.filesystemSize,
	f.used,
	f.unUsed,
	c.totalContentInfo,
	s.totalTask,
	s2.totalActualTask
FROM
	tab_FileSystem f join (
		select count(id) totalContentInfo from tab_ContentInfo
	) c join (
		select count(v2vID) totalTask from tab_StationSgInfo 
	) s join (
		select count(v2vID) totalActualTask from tab_StationSgInfo where v2vState = 2
	) s2

 报错信息如下:

Error : View's SELECT contains a subquery in the FROM clause

 网上查找了下,说是mysql视图不支持子查询,然后就网上查资料呗,大多数都说,需要把视图进行拆分,既然网上都这么说,那就拆吧:

create or replace view view_temp_filesystem as
select f.filesystemSize, f.used, f.unUsed, count(c.id) totalContentInfo from tab_FileSystem f, tab_ContentInfo c group by f.filesystemDir;

create or replace view view_temp_actualtask as
select count(s.v2vID) totalActualTask from tab_StationSgInfo s where s.v2vState = 2;

create or replace view view_temp_totaltask as
select count(s.v2vID) totalActualTask from tab_StationSgInfo s ;

create or replace view view_systeminfo_detail as 
select f.*, s.*, a.* from view_temp_filesystem f, view_temp_actualtask a, view_temp_totaltask s ;

 结果就一个查询,创建了4个视图,感觉目的终于达到了,先高兴一番,然后让领导查看了下,结果领导来了句,没必要这么麻烦,有更简单的方式:

CREATE OR REPLACE VIEW view_systeminfo_detail as
SELECT
	f.filesystemSize,
	f.used,
	f.unUsed,
	(select count(distinct c.id ) from tab_ContentInfo c) totalContentInfo,
	(select count(distinct s1.v2vID) totalTask from tab_StationSgInfo s1 ) totalTask,
	(select count(distinct s2.v2vID) totalActualTask from tab_StationSgInfo s2 where s2.v2vState = 2) totalActualTask,
	(select count(distinct u1.userId) totalUser from tab_User u1) totalUser,
	(select count(distinct u2.userId) totalUser from tab_User u2 where u2.userState = 1) onlineUser
FROM
	tab_FileSystem f

 

看完SQL之后,感觉眼前瞬间一亮啊,哇塞,SQL居然还可以这么玩,感觉好高大上啊。

 

不知道别人还有没有更好的解决方案,不管怎么着,先记录一下总是好的。

 

酷酷酷酷酷酷酷酷

 

又发现了点新用法,再次记录一下:

CREATE OR REPLACE VIEW view_systeminfo_detail as
SELECT
	f.filesystemSize,
	f.used,
	f.unUsed,
	(select count(distinct c.id ) from tab_ContentInfo c) totalContentInfo,
	(select count(distinct s1.v2vID) totalTask from tab_StationSgInfo s1 ) totalTask,
	(select count(distinct s2.v2vID) totalActualTask from tab_StationSgInfo s2 where s2.v2vState = 2) totalActualTask,
	(select count(distinct u1.userId) totalUser from tab_User u1) totalUser,
	(select count(distinct u2.userId) totalUser from tab_User u2 where u2.userState = 1) onlineUser,
	round(((select totalActualTask) / (select totalTask) * 0.8 + f.used / f.filesystemSize * 0.2) * 100, 0) capability
FROM
	tab_FileSystem f

 注意select中的最后一列,居然可以这么用,好兴奋,又get了一个技能。。。。。。

分享到:
评论

相关推荐

    利用视图提高MySQL查找效率.doc

    视图可以被理解为数据库中的虚拟表,虽然它不实际存储任何数据,但可以根据预定义的SQL SELECT语句来动态获取所需的数据。视图的使用主要体现在以下几个方面: 1. **简化操作**:视图简化了用户对数据库的操作。...

    mysql各种语句多表查询+ mysql视图 mysql数据库管理+ select语句+ 创建

    外连接允许你在结果集中包含不匹配的记录,而子查询是在一个查询中嵌套另一个查询,用于获取满足特定条件的数据。例如,你可以使用子查询来找出某个部门薪水最高的员工,然后再用这个结果去与其他部门的员工比较。 ...

    MySQL数据库查询优化

    从实践看,MySQL的子查询优化技术的内容和范围,明确掌握子查询优化手段 预计时间2小时,每小时一个课程段(子查询是SQL查询优化的重点内容,务必掌握好) 第5课 查询优化技术理论与MySQL实践(三)------视图重写...

    25.6 MySQL 子查询

    MySQL 子查询是一种在SQL查询语句中嵌套其他查询的方法,它允许我们在一个查询中使用另一个查询的结果。子查询可以作为SELECT语句的一部分,也可以出现在FROM或WHERE子句中,甚至可以在HAVING子句中使用。它们为...

    MySQL 视图 第1349号错误解决方法

    这主要是因为MySQL不允许在视图的FROM子句中直接使用子查询,尤其是当这个子查询涉及到分组(GROUP BY)和聚合函数(如MAX)时。 原试图创建的视图`BLOG_V_ADMIN`如下: ```sql CREATE OR REPLACE VIEW BLOG_V_...

    李海翔 - MySQL视图优化

    首先,李海翔在讨论中指出,视图优化不仅仅是指在MySQL中对视图的优化,而是将视图和派生表(由子查询构成的表)的优化放在一起考虑。这是因为视图和派生表在查询优化过程中具有一定的相似性。它们通常都是通过内嵌...

    25.11 MySQL 视图

    配合提供的资源,如`.eddx`、`.md`和`.pptx`文件,你可以更深入地学习MySQL视图的相关知识,包括具体的创建方法、使用示例、以及如何在实际项目中应用。 总的来说,MySQL视图是一个强大的工具,它可以帮助我们更好...

    mysql视图之创建视图(CREATE VIEW)和使用限制实例详解

    `SELECT`语句是视图的基础,它可以引用任何存在的表或视图,但有特定的限制,如不能在`FROM`子句中使用子查询,不能引用变量,也不能引用预处理语句的参数。 例如,以下是如何创建一个名为`SalePerOrder`的视图,该...

    mysql视图之创建可更新视图的方法详解

    本文实例讲述了mysql视图之创建可更新视图的方法。分享给大家供大家参考,具体如下: 我们知道,在mysql中,视图不仅是可查询的,而且是可更新的。这意味着我们可以使用insert或update语句通过可更新视图插入或更新...

    MySQL数据库:视图的使用.pptx

    本文将详细介绍 MySQL 数据库中的视图的使用,包括可更新视图的条件、通过视图对基本表进行数据插入、修改和删除的方法。 一、可更新视图 在 MySQL 中,视图可以是可更新的,也可以是不可更新的。可更新视图可以...

    详细分析mysql视图的原理及使用方法

    - 更新视图:如果视图支持更新(即没有使用聚合函数或子查询),可以使用`INSERT`, `UPDATE`, 或 `DELETE`语句。但要注意,更新必须遵守`WITH CHECK OPTION`的约束。 - 删除视图:使用`DROP VIEW`语句。 - 联合...

    数据库系列(:MySQL 视图、触发器的原理与实战

    - 不支持包含FROM子句中的子查询或多个表的视图。 **2. 更新视图的操作** - 插入(INSERT):可以在视图中插入数据,但是视图必须是可更新的。 - 删除(DELETE):可以从视图中删除数据,同样视图必须是可更新的。...

    推荐-mysql视图用户管理.docx

    MySQL视图是一种虚拟的表,它并不存储数据,而是基于一个或多个表的查询结果。视图可以简化复杂的查询,提供数据的安全性,并且可以隐藏基础表的结构。在本实验中,我们学习如何在SQL Server环境中创建、修改和删除...

    子查询 连接查询 视图详细笔记

    这是数据库和pycharm之间的连接,以及子查询和连接查询

    09mysql子查询(重点难点)

    这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知识点,查询,子查询,分组,排序,常用函数,多表连接,视图,变量,存储过程,函数,分支结构,循环结构等等

    推荐-mysql视图用户管理.pdf

    【MySQL 视图用户管理】 在数据库管理系统中,视图和用户管理是数据安全和权限控制的重要组成部分。MySQL 是一种广泛使用的开源关系型数据库管理系统,它提供了强大的视图创建、修改和删除功能,以及完善的用户和...

    MySQL 数据库考核选择题 带答案 测试题 期末题.docx

    - **定义**:MySQL是一种开源的关系型数据库管理系统(RDBMS),支持SQL(结构化查询语言)。 - **特点**:高可用性、高性能、易于管理。 - **应用场景**:网站开发、企业级应用等。 #### 2. SQL语句 - **数据定义...

    支持MYSQL和ORACLE数据库表

    例如,MySQL支持窗口函数和子查询优化,而Oracle有更丰富的分区功能和物质化视图。在处理大数据量时,两者都能通过索引优化、查询优化器等手段提升查询速度。 DBExportDoc V1.0 For Oracle.doc 和 DBExportDoc V1.0...

Global site tag (gtag.js) - Google Analytics