今天领导让我写一个视图,需要把三张没有任何关联关系的表数据整合到一张视图上,
我按照最初的方式先把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了一个技能。。。。。。
相关推荐
什么是视图?视图就是一个存在于数据库中的虚拟表。视图本身没有数据,只是通过执行相应的select语句完成获得相应的数据。...如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果来做子查询这种。
数据库mysql的各种查询语句check的完整性约束 mysql多表查询+ mysql视图 mysql数据库管理+ select语句+ 创建表+ 多表链接 分类汇总 外连接和子查询 完整性约束等等
从实践看,MySQL的子查询优化技术的内容和范围,明确掌握子查询优化手段 预计时间2小时,每小时一个课程段(子查询是SQL查询优化的重点内容,务必掌握好) 第5课 查询优化技术理论与MySQL实践(三)------视图重写...
5、子查询 6、合并查询结果 7、为表和字段取别名 8、使用正则表达式查询 什么是查询? 怎么查的? 数据的准备如下: [sql] view plain copy create table STUDENT( STU_ID int primary KEY, STU_NAME char(10) ...
本文实例讲述了mysql视图之创建可更新视图的方法。分享给大家供大家参考,具体如下: 我们知道,在mysql中,视图不仅是可查询的,而且是可更新的。这意味着我们可以使用insert或update语句通过可更新视图插入或更新...
这是数据库和pycharm之间的连接,以及子查询和连接查询
这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知识点,查询,子查询,分组,排序,常用函数,多表连接,视图,变量,存储过程,函数,分支结构,循环结构等等
:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。 对于创建视图中的 SELECT 语句的指定存在以下限制: 用户除了拥有 CREATE VIEW 权限外,还具有操作中涉及的基础表和其他视图的相关权限。 SELECT ...
MySQL中的视图(View)是一种虚拟的表,它是基于SQL查询结果的集合。视图并不存储实际的数据,而是在需要时动态地从基表中获取数据。视图的作用主要有以下几点: 1. 简化复杂的SQL操作:通过将复杂的SQL查询定义为...
6.7.3优化子查询239 6.7.4优化GROUPBY和DISTINCT239 6.7.5优化LIMIT分页241 6.7.6优化SQL_CALC_FOUND_ROWS243 6.7.7优化UNION查询243 6.7.8静态查询分析244 6.7.9使用用户自定义变量244 6.8案例学习251 ...
这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知识点,查询,子查询,分组,排序,常用函数,多表连接,视图,变量,存储过程,函数,分支结构,循环结构等等
1、基于第一次上机创建的银行数据库,创建一个视图branch_detail,能够显示所有支行的存款客户数量、存款总额、贷款客户数量、贷款总额。 2、在account的account_number属性上建立索引,并在account表里插入大量元组...
这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知识点,查询,子查询,分组,排序,常用函数,多表连接,视图,变量,存储过程,函数,分支结构,循环结构等等
mysql必备面试题 请解释MySQL是什么,它的用途是什么? 描述一下MySQL的主要...在MySQL中如何使用子查询? 解释一下MySQL中的ANSI SQL是什么,它的作用是什么? 描述一下MySQL中的视图优化是什么,应该如何优化视图?
5.4.4 存储过程和触发器 5.4.5 外键(Foreign Keys) 5.4.5.1 不使用外键的理由 5.4.6 视图(Views) 5.4.7 '--'作为一个 注解的开始 5.5 MySQL 遵循什么标准? 5.6 怎样处理没有提交/回卷...
而上一本稳定版本5.6.48不支持视图子查询SQL,这要牢记!Oracle收购Mysql后,技术有了融合和提升,对视图和子查询支持更好,所以我也在mysql采用了带子查询的视图,提高了开发效率。Oracle 的SQL采用的雷PASCAL语言...
这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知识点,查询,子查询,分组,排序,常用函数,多表连接,视图,变量,存储过程,函数,分支结构,循环结构等等
书中有大量使用Perl、PHP、Python、Java甚至Ruby来检索并显示数据的新示例,还增加了子查询、视图、存储过程、触发器和事件等内容。 本书适合于所有从事数据库技术开发的相关人员阅读,是MySQL开发人员案头必备之...
《MySQL Cookbook(中文版)》为各个层次的、没有时间和精力来从头解决MySQL问题的用户...书中有大量使用Perl、PHP、Python、Java甚至Ruby来检索并显示数据的新示例,还增加了子查询、视图、存储过程、触发器和事件等内容
这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知识点,查询,子查询,分组,排序,常用函数,多表连接,视图,变量,存储过程,函数,分支结构,循环结构等等