oracle 列不能外部联接到子查询,ORA-01799 列不能外部联接到子查询
需求及问题
在一些表关联查询中,当存在源表和关联表都有过虑条件(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 列不能外部联接到子查询相关推荐
- oracle单行子查询返回多个行 order by,单行子查询返回多个行
子查询: 用子查询能解决的问题 假想你想要写一个查询来找出挣钱比陆涛的薪水还多的人.为了解决这个问题,你需要两个查询:一 个找出陆涛的收入,第二个查询找出收入高于陆涛的人. 你可以用组合两个查询的方法 ...
- 高级查询(1.连接查询(对列的扩展)2.联合查询(对行的扩展)3.子查询)
高级查询 1.连接查询(对列的扩展) 第一种形式: select * from Info,Nation #会形成笛卡尔积 select * from Info,Nation where Info.Na ...
- mysql子查询语句多列_MYSQL 子查询返回多列显示
因工作需要,目前研究出一种mysql 技能,与大家分享一下. 需求:关联查询另一个大表数据的某些(一个以上)字段 方案:因关联查询的表数据太大.多表查询影响效率,单个子查询又有些多余.所以采用多列拼接 ...
- MySql基础篇---002 SQL之SELECT使用篇: 基本的SELECT语句,运算符,排序与分页,多表查询,单行函数,聚合函数,子查询
第03章_基本的SELECT语句 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. SQL概述 1.1 SQL背景知识 1946 年,世界上第一台电脑 ...
- mysql查询男生基本情况_详解MySql基本查询、连接查询、子查询、正则表达查询...
select * from STUDENT; 2.2.按条件查询 (1) 比较运算符 > , < ,= , != (< >),>= , <= select * fr ...
- T-SQL查询进阶--基于列的逻辑表达式
T-SQL不仅仅是一个用于查询数据库的语言,还是一个可以对数据进行操作的语言.基于列的CASE表达式就是其中一种,不像其他查询语句可以互相替代(比如用子查询实现的查询也可以使用Join实现),CASE ...
- mysql 数据相加_mysql,php_mysql查询将两列数值相加问题,mysql,php,sql - phpStudy
mysql查询将两列数值相加问题 如图所示: 我希望加一个total_price列,值为price+price2的和,这个应该怎么写SQL: select * from ims_goods_1 whe ...
- 检索数据_1_从表中查询所有行和列
从表中查询所有行和列 需求描述 需求:检索表里所有行的数据. 解决方法:通过SQL的关键字*来匹配到所有行和列,结合SELECT FROM 即可满足需求. 注: 数据库数据集SQL脚本详见如下链接地址 ...
- 数据库查询某一列大写转化小写字母表示_基于MySQL数据库下亿级数据的分库分表...
每天给你诚意满满的干货 本文来自程序之心知乎专栏收到的投稿 作者:恒生研究院 移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据等这样的分析,都需要依靠数据统计和分析,当数据量小时,数据库方 ...
- 嵌套套娃,MySQL子查询,单行与多行子查询,相关和不相关(关联)子查询,完整详细可收藏
文章目录 1.需求分析与问题解决 2.单行子查询 3.多行子查询 4.相关子查询 5.抛一个思考题 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入.SQL 中 ...
最新文章
- Java项目构建基础:统一结果,统一异常,统一日志(好文推荐)
- 神经网络完成芯片设计仅需几小时
- pycharm自定义格式化
- 域名解析对网站SEO优化有何影响?
- Laravel大型项目系列教程(二)之用户管理
- oracle mysql 创建表,Oracle 创建表用户、空间
- 【渝粤题库】陕西师范大学210010 幼儿园管理学 作业(高起专、专升本)
- pythonpygame中主函数_从0开始学Python-14.2 pygame的核心对象
- 人类开采黄金这么多年了,为何黄金还没像石头一样廉价呢?
- 热力图怎么做_LncRNA这么热,5分左右的LncRNA研究文章应该怎么做
- DxO FilmPack 5详细教程:对照片进行艺术渲染,使其具有专业电影的色彩和颗粒感
- Pojo、Po、Vo、Dto的含义
- MSP430 MSP430单片机输入/输出模块 通用I/O端口GPIO
- 滴滴DSRC抢楼大赛,十一快车券飞起来
- 程序猿生存指南-45 迁徙的鸟
- Frontiers in Pharmacology2020 | MOSES+:分子生成模型的benchmark平台
- 基于SpringBoot+VUE的酒店管理信息系统的设计思路
- html多重表格设置密码,日记坊-excel协同办公:一张表格设置多个不同密码,限制多区域编辑权限...
- python 打包exe_python pyinstaller打包exe报错的解决方法
- linux编译环境下,华为LiteOS初体验(STM32F407)
热门文章
- Swagger API文档Responses中Object类型无法显示,求指引
- Win10修改用户名及用户文件夹名
- PeopleSoft开发:创建查询QUERY
- peoplesoft笔记
- 笔记本电池“衰老”了怎么办?
- 计算机网卡的总线接口分类有,网卡的详细分类是怎样的?以太网卡有将高层数据转换为比特流的功能吗?...
- ansible (一)
- 黄牛用高性能服务器抢票,还在找黄牛“加速”抢票?成功抢票旅客:黄牛让我去12306候补...
- 基于Python语言豆瓣电影数据挖掘与分析
- 在C ++中加载TORCHSCRIPT模型