创建视图提示:View‘s SELECT contains a subquery in the FROM clause.

创建视图提示:View’s SELECT contains a subquery in the FROM clause.

mysql、view、select、subquery

背景

  • 环境版本:mysql 5.6.46
  • 业务场景:甲方要求提供一个查询视图,字段比较多,处理逻辑也比较复杂,什么分组、子查询、排序、多表连接都用上了

问题描述

  • 现象

创建视图的语句大概是这样(查询语句从网上扒的,以免泄密):

create definer = root@`%` view a_view as
SELECT c.scan_man AS scan_man, c.DOC_ID AS DOC_ID, c.db_time arrive_time, d.db_time assign_time
FROM (SELECT DOC_ID AS DOC_ID, DB_TIME AS db_time, SCAN_MAN AS scan_man FROM test WHERE SCAN_TYPE = 13) c
         LEFT JOIN (SELECT DOC_ID AS DOC_ID, DB_TIME AS db_time
                    FROM test
                    WHERE SCAN_TYPE = 10) d
                   ON c.DOC_ID = d.DOC_ID
GROUP BY c.DOC_ID, c.scan_man;

不加 create view 的时候,单独执行select语句一切正常,数据也没问题

  • 开发及调测工具信息

加上create view语句,在idea的数据库console文件里执行(和select一样的执行方式),下面的services窗口却提示:View's SELECT contains a subquery in the FROM clause.

原因分析

  • 经验之谈:一看这英文不是说的什么子查询吗,有子查询有什么问题吗,单纯select也没什么问题啊?而且这是说的select字段中的子句,还是说的where还是说的join?不明白指的是哪里;
  • 周边见解:我写一半的时候有人和我说,我原来的写法太费事(所有关联操作都放在了where里),建议我直接在select的字段处写,我当时虽然非常怀疑这个性能,但还是照做了;
  • 网络搜索:找到一篇博客
    ,原来说的是where里不能有子查询(就是上边SQL的括号里的部分)。

解决方案

  1. 逐个从where中删除子查询
  2. 在select中的相应字段重写查询关联逻辑

声明:本文使用八爪鱼rpa工具从gitee自动搬运本人原创(或摘录,会备注出处)博客,如版式错乱请评论私信,如情况紧急或久未回复请致邮 xkm.0jiejie0@qq.com 并备注原委;引用本人笔记的链接正常情况下均可访问,如打不开请查看该链接末尾的笔记标题(右击链接文本,点击 复制链接地址,在文本编辑工具粘贴查看,也可在搜索框粘贴后直接编辑然后搜索),在本人博客手动搜索该标题即可;如遇任何问题,或有更佳方案,欢迎与我沟通!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值