今天领导让我写一个视图,需要把三张没有任何关联关系的表数据整合到一张视图上,
我按照最初的方式先把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了一个技能。。。。。。
相关推荐
视图可以被理解为数据库中的虚拟表,虽然它不实际存储任何数据,但可以根据预定义的SQL SELECT语句来动态获取所需的数据。视图的使用主要体现在以下几个方面: 1. **简化操作**:视图简化了用户对数据库的操作。...
外连接允许你在结果集中包含不匹配的记录,而子查询是在一个查询中嵌套另一个查询,用于获取满足特定条件的数据。例如,你可以使用子查询来找出某个部门薪水最高的员工,然后再用这个结果去与其他部门的员工比较。 ...
从实践看,MySQL的子查询优化技术的内容和范围,明确掌握子查询优化手段 预计时间2小时,每小时一个课程段(子查询是SQL查询优化的重点内容,务必掌握好) 第5课 查询优化技术理论与MySQL实践(三)------视图重写...
MySQL 子查询是一种在SQL查询语句中嵌套其他查询的方法,它允许我们在一个查询中使用另一个查询的结果。子查询可以作为SELECT语句的一部分,也可以出现在FROM或WHERE子句中,甚至可以在HAVING子句中使用。它们为...
这主要是因为MySQL不允许在视图的FROM子句中直接使用子查询,尤其是当这个子查询涉及到分组(GROUP BY)和聚合函数(如MAX)时。 原试图创建的视图`BLOG_V_ADMIN`如下: ```sql CREATE OR REPLACE VIEW BLOG_V_...
首先,李海翔在讨论中指出,视图优化不仅仅是指在MySQL中对视图的优化,而是将视图和派生表(由子查询构成的表)的优化放在一起考虑。这是因为视图和派生表在查询优化过程中具有一定的相似性。它们通常都是通过内嵌...
配合提供的资源,如`.eddx`、`.md`和`.pptx`文件,你可以更深入地学习MySQL视图的相关知识,包括具体的创建方法、使用示例、以及如何在实际项目中应用。 总的来说,MySQL视图是一个强大的工具,它可以帮助我们更好...
`SELECT`语句是视图的基础,它可以引用任何存在的表或视图,但有特定的限制,如不能在`FROM`子句中使用子查询,不能引用变量,也不能引用预处理语句的参数。 例如,以下是如何创建一个名为`SalePerOrder`的视图,该...
本文实例讲述了mysql视图之创建可更新视图的方法。分享给大家供大家参考,具体如下: 我们知道,在mysql中,视图不仅是可查询的,而且是可更新的。这意味着我们可以使用insert或update语句通过可更新视图插入或更新...
本文将详细介绍 MySQL 数据库中的视图的使用,包括可更新视图的条件、通过视图对基本表进行数据插入、修改和删除的方法。 一、可更新视图 在 MySQL 中,视图可以是可更新的,也可以是不可更新的。可更新视图可以...
- 更新视图:如果视图支持更新(即没有使用聚合函数或子查询),可以使用`INSERT`, `UPDATE`, 或 `DELETE`语句。但要注意,更新必须遵守`WITH CHECK OPTION`的约束。 - 删除视图:使用`DROP VIEW`语句。 - 联合...
- 不支持包含FROM子句中的子查询或多个表的视图。 **2. 更新视图的操作** - 插入(INSERT):可以在视图中插入数据,但是视图必须是可更新的。 - 删除(DELETE):可以从视图中删除数据,同样视图必须是可更新的。...
MySQL视图是一种虚拟的表,它并不存储数据,而是基于一个或多个表的查询结果。视图可以简化复杂的查询,提供数据的安全性,并且可以隐藏基础表的结构。在本实验中,我们学习如何在SQL Server环境中创建、修改和删除...
这是数据库和pycharm之间的连接,以及子查询和连接查询
这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知识点,查询,子查询,分组,排序,常用函数,多表连接,视图,变量,存储过程,函数,分支结构,循环结构等等
【MySQL 视图用户管理】 在数据库管理系统中,视图和用户管理是数据安全和权限控制的重要组成部分。MySQL 是一种广泛使用的开源关系型数据库管理系统,它提供了强大的视图创建、修改和删除功能,以及完善的用户和...
- **定义**:MySQL是一种开源的关系型数据库管理系统(RDBMS),支持SQL(结构化查询语言)。 - **特点**:高可用性、高性能、易于管理。 - **应用场景**:网站开发、企业级应用等。 #### 2. SQL语句 - **数据定义...
例如,MySQL支持窗口函数和子查询优化,而Oracle有更丰富的分区功能和物质化视图。在处理大数据量时,两者都能通过索引优化、查询优化器等手段提升查询速度。 DBExportDoc V1.0 For Oracle.doc 和 DBExportDoc V1.0...