需求及问题

在一些表关联查询中,当存在源表和关联表都有过虑条件(and)时,如果其中一个条件不符合,结果就有可能为空;

而实际上我们要求结果集中,条件不符合的显示空,但其它条件正常的,依然要显示。

1.要达到目的,不符合的数据显示为空,符合的照常显示

2.直接在where里放入条件,当有一个不符合时,结果集可能为空

/*需求和问题*/

/*1.where中放两个查询条件,有可能数据集为空*/

selec distinct t t.sec_code, t.sec_sname,

decode(t1.chng_pct,null,'--',TO_CHAR(t1.chng_pct,'FM9999999999999990.90')) chng_pct, t.trans_type, t.tradedate

from mv_stk_trans_info t left outer join mv_sec_mkt t1 on t.sec_unicode = t1.sec_unicode

where t.tradedate=(select max(tradedate) from mv_stk_trans_info )

and t1.tradedate=(select max(tradedate) from mv_stk_trans_info )

order by t.sec_code asc;

3.把限制为空列的条件放到outer join的on中,要报ORA-01799:列不能外部联接到子查询的错

/*2.把限制为空列的条件放到outer join的on中,要报ORA-01799:列不能外部联接到子查询的错*/

select distinct t.sec_code, t.sec_sname,

decode(t1.chng_pct,null,'--',TO_CHAR(t1.chng_pct,'FM9999999999999990.90')) chng_pct, t.trans_type, t.tradedate

from mv_stk_trans_info t

left outer join mv_sec_mkt t1 on t.sec_unicode = t1.sec_unicode

and t1.tradedate=(select max(tradedate) from mv_stk_trans_info )

where t.tradedate=(select max(tradedate) from mv_stk_trans_info )

order by t.sec_code asc;

解决方案

1.先查询出关联表的关联列,条件列,以及其它需要的列,查询结果集作为一个表,再让其它表来关联这个结果集

/*(推荐)1.先查询出关联表的关联列,条件列,以及其它需要的列,查询结果集作为一个表,再让其它表来关联这个结果集*/

/*方案1,速度运行为0.938*/

select distinct t.sec_code, t.sec_sname,

decode(t1.chng_pct,null,'--',TO_CHAR(t1.chng_pct,'FM9999999999999990.90')) chng_pct, t.trans_type, t.tradedate

from mv_stk_trans_info t left outer join

(select sec_unicode, chng_pct from mv_sec_mkt

where tradedate=(select max(tradedate) from mv_sec_mkt)) t1 on t.sec_unicode=t1.sec_unicode

where t.tradedate=(select max(tradedate) from mv_stk_trans_info )

order by t.sec_code asc;

2.先用一个函数来完成关联表的限制条件,并返回限制条件,再在outer join的on中加入限制条件

/*2.先用一个函数来完成关联表的限制条件,并返回限制条件,再在outer join的on中加入限制条件*/

/*方案2,速度运行为3.922*/

--函数返回关联条件

create or replace function fun_getMaxDay return date as

v_max_date date;

begin

select max(tradedate) into v_max_date from mv_stk_trans_info;

return v_max_date;

end;

--关联查询

select t.sec_code, t.sec_sname,

decode(t1.chng_pct,null,'--',TO_CHAR(t1.chng_pct,'FM9999999999999990.90')) chng_pct, t.trans_type, t.tradedate

from mv_stk_trans_info t left outer join mv_sec_mkt t1 on t.sec_unicode = t1.sec_unicode

and t1.tradedate=fun_getMaxDay

where t.tradedate=(select max(tradedate) from mv_stk_trans_info )

order by t.sec_code asc;

方案1.2均能达到目的,但方案1用时少,且方便,推荐1。

oracle 列不能外部联接到子查询,ORA-01799 列不能外部联接到子查询相关推荐

  1. oracle单行子查询返回多个行 order by,单行子查询返回多个行

    子查询: 用子查询能解决的问题 假想你想要写一个查询来找出挣钱比陆涛的薪水还多的人.为了解决这个问题,你需要两个查询:一 个找出陆涛的收入,第二个查询找出收入高于陆涛的人. 你可以用组合两个查询的方法 ...

  2. 高级查询(1.连接查询(对列的扩展)2.联合查询(对行的扩展)3.子查询)

    高级查询 1.连接查询(对列的扩展) 第一种形式: select * from Info,Nation #会形成笛卡尔积 select * from Info,Nation where Info.Na ...

  3. mysql子查询语句多列_MYSQL 子查询返回多列显示

    因工作需要,目前研究出一种mysql 技能,与大家分享一下. 需求:关联查询另一个大表数据的某些(一个以上)字段 方案:因关联查询的表数据太大.多表查询影响效率,单个子查询又有些多余.所以采用多列拼接 ...

  4. MySql基础篇---002 SQL之SELECT使用篇: 基本的SELECT语句,运算符,排序与分页,多表查询,单行函数,聚合函数,子查询

    第03章_基本的SELECT语句 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. SQL概述 1.1 SQL背景知识 1946 年,世界上第一台电脑 ...

  5. mysql查询男生基本情况_详解MySql基本查询、连接查询、子查询、正则表达查询...

    select * from STUDENT; 2.2.按条件查询 (1) 比较运算符 > , < ,= , != (< >),>= , <= select * fr ...

  6. T-SQL查询进阶--基于列的逻辑表达式

    T-SQL不仅仅是一个用于查询数据库的语言,还是一个可以对数据进行操作的语言.基于列的CASE表达式就是其中一种,不像其他查询语句可以互相替代(比如用子查询实现的查询也可以使用Join实现),CASE ...

  7. mysql 数据相加_mysql,php_mysql查询将两列数值相加问题,mysql,php,sql - phpStudy

    mysql查询将两列数值相加问题 如图所示: 我希望加一个total_price列,值为price+price2的和,这个应该怎么写SQL: select * from ims_goods_1 whe ...

  8. 检索数据_1_从表中查询所有行和列

    从表中查询所有行和列 需求描述 需求:检索表里所有行的数据. 解决方法:通过SQL的关键字*来匹配到所有行和列,结合SELECT FROM 即可满足需求. 注: 数据库数据集SQL脚本详见如下链接地址 ...

  9. 数据库查询某一列大写转化小写字母表示_基于MySQL数据库下亿级数据的分库分表...

    每天给你诚意满满的干货 本文来自程序之心知乎专栏收到的投稿 作者:恒生研究院 移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据等这样的分析,都需要依靠数据统计和分析,当数据量小时,数据库方 ...

  10. 嵌套套娃,MySQL子查询,单行与多行子查询,相关和不相关(关联)子查询,完整详细可收藏

    文章目录 1.需求分析与问题解决 2.单行子查询 3.多行子查询 4.相关子查询 5.抛一个思考题 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入.SQL 中 ...

最新文章

  1. Java项目构建基础:统一结果,统一异常,统一日志(好文推荐)
  2. 神经网络完成芯片设计仅需几小时
  3. pycharm自定义格式化
  4. 域名解析对网站SEO优化有何影响?
  5. Laravel大型项目系列教程(二)之用户管理
  6. oracle mysql 创建表,Oracle 创建表用户、空间
  7. 【渝粤题库】陕西师范大学210010 幼儿园管理学 作业(高起专、专升本)
  8. pythonpygame中主函数_从0开始学Python-14.2 pygame的核心对象
  9. 人类开采黄金这么多年了,为何黄金还没像石头一样廉价呢?
  10. 热力图怎么做_LncRNA这么热,5分左右的LncRNA研究文章应该怎么做
  11. DxO FilmPack 5详细教程:对照片进行艺术渲染,使其具有专业电影的色彩和颗粒感
  12. Pojo、Po、Vo、Dto的含义
  13. MSP430 MSP430单片机输入/输出模块 通用I/O端口GPIO
  14. 滴滴DSRC抢楼大赛,十一快车券飞起来
  15. 程序猿生存指南-45 迁徙的鸟
  16. Frontiers in Pharmacology2020 | MOSES+:分子生成模型的benchmark平台
  17. 基于SpringBoot+VUE的酒店管理信息系统的设计思路
  18. html多重表格设置密码,日记坊-excel协同办公:一张表格设置多个不同密码,限制多区域编辑权限...
  19. python 打包exe_python pyinstaller打包exe报错的解决方法
  20. linux编译环境下,华为LiteOS初体验(STM32F407)

热门文章

  1. Swagger API文档Responses中Object类型无法显示,求指引
  2. Win10修改用户名及用户文件夹名
  3. PeopleSoft开发:创建查询QUERY
  4. peoplesoft笔记
  5. 笔记本电池“衰老”了怎么办?
  6. 计算机网卡的总线接口分类有,网卡的详细分类是怎样的?以太网卡有将高层数据转换为比特流的功能吗?...
  7. ansible (一)
  8. 黄牛用高性能服务器抢票,还在找黄牛“加速”抢票?成功抢票旅客:黄牛让我去12306候补...
  9. 基于Python语言豆瓣电影数据挖掘与分析
  10. 在C ++中加载TORCHSCRIPT模型