`
dove19900520
  • 浏览: 592835 次
  • 性别: 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

    什么是视图?视图就是一个存在于数据库中的虚拟表。视图本身没有数据,只是通过执行相应的select语句完成获得相应的数据。...如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果来做子查询这种。

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

    数据库mysql的各种查询语句check的完整性约束 mysql多表查询+ mysql视图 mysql数据库管理+ select语句+ 创建表+ 多表链接 分类汇总 外连接和子查询 完整性约束等等

    MySQL数据库查询优化

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

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    5、子查询 6、合并查询结果 7、为表和字段取别名 8、使用正则表达式查询 什么是查询? 怎么查的? 数据的准备如下: [sql] view plain copy create table STUDENT( STU_ID int primary KEY, STU_NAME char(10) ...

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

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

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

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

    09mysql子查询(重点难点)

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

    MySQL如何创建视图

    :指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。 对于创建视图中的 SELECT 语句的指定存在以下限制: 用户除了拥有 CREATE VIEW 权限外,还具有操作中涉及的基础表和其他视图的相关权限。 SELECT ...

    (mysql面试题)MySQL中的视图的概念及其作用及代码展示.txt

    MySQL中的视图(View)是一种虚拟的表,它是基于SQL查询结果的集合。视图并不存储实际的数据,而是在需要时动态地从基表中获取数据。视图的作用主要有以下几点: 1. 简化复杂的SQL操作:通过将复杂的SQL查询定义为...

    高性能MySQL(第3版).part2

    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 ...

    03查询(mysql入门之排序查询)select

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

    西安电子科技大学MySQL数据库上机2答案

    1、基于第一次上机创建的银行数据库,创建一个视图branch_detail,能够显示所有支行的存款客户数量、存款总额、贷款客户数量、贷款总额。 2、在account的account_number属性上建立索引,并在account表里插入大量元组...

    02查询(mysql入门之条件查询)select

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

    mysql必备面试题,mysql必问的面试题

    mysql必备面试题 请解释MySQL是什么,它的用途是什么? 描述一下MySQL的主要...在MySQL中如何使用子查询? 解释一下MySQL中的ANSI SQL是什么,它的作用是什么? 描述一下MySQL中的视图优化是什么,应该如何优化视图?

    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 怎样处理没有提交/回卷...

    Oracle_SQL_PLSQL培训.rar

    而上一本稳定版本5.6.48不支持视图子查询SQL,这要牢记!Oracle收购Mysql后,技术有了融合和提升,对视图和子查询支持更好,所以我也在mysql采用了带子查询的视图,提高了开发效率。Oracle 的SQL采用的雷PASCAL语言...

    01查询(mysql入门之基础)select

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

    MySQL Cookbook(第2版) 中文版.pdf

    书中有大量使用Perl、PHP、Python、Java甚至Ruby来检索并显示数据的新示例,还增加了子查询、视图、存储过程、触发器和事件等内容。  本书适合于所有从事数据库技术开发的相关人员阅读,是MySQL开发人员案头必备之...

    [MySQL.Cookbook(第2版)].(美)迪布瓦.中文版.扫描版

    《MySQL Cookbook(中文版)》为各个层次的、没有时间和精力来从头解决MySQL问题的用户...书中有大量使用Perl、PHP、Python、Java甚至Ruby来检索并显示数据的新示例,还增加了子查询、视图、存储过程、触发器和事件等内容

    08mysql连接查询(sql99)

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

Global site tag (gtag.js) - Google Analytics