Oracle外链接查询遇上过滤条件后导致外链接失效
2015-10-31 22:36
190 查看
今天遇到一个外链接加上过滤条件导致外链接失效(也就是没有起作用
),虽然是个小问题,但是自己之前真的没有在意,今天记一下顺便温习一下oracle表连接:
SQL> select * from t1;
A B
---------- ----------
1 101
2 102
3 103
4 104
5 105
6 106
7 107
8 108
9 109
SQL> select * from t2;
C D
---------- ----------
1001
2 1002
1003
4 1004
1005
6 1006
1007
8 1008
1009
SQL> select a,b,c,d from t1,t2 where t1.a=t2.c(+); ---不加过滤条件,会得到下面的结果集
A B C D
---------- ---------- ---------- ----------
2 102 2 1002
4 104 4 1004
6 106 6 1006
8 108 8 1008
5 105
3 103
1 101
7 107
9 109
SQL> select a,b,c,d from t1,t2 where t1.a=t2.c(+) and t2.d>1001; --但是加了过滤调价t2.d>1001后发现直接外链接就没作用了
A B C D
---------- ---------- ---------- ----------
2 102 2 1002
4 104 4 1004
6 106 6 1006
8 108 8 1008
SQL> select a,b,c,d from t1,t2 where t1.a=t2.c(+) and t2.d(+)>1001; ---改成t2.d(+)>1001,查询又会继续走外链接
A B C D
---------- ---------- ---------- ----------
2 102 2 1002
4 104 4 1004
6 106 6 1006
8 108 8 1008
5 105
3 103
1 101
7 107
9 109
结论:当表连接使用外连接时,如果where字句包含多个条件,必须在所有条件中都增加(+)操作符,否则外链接很有可能直接不起作用的,
谨以此记录一下
SQL> select * from t1;
A B
---------- ----------
1 101
2 102
3 103
4 104
5 105
6 106
7 107
8 108
9 109
SQL> select * from t2;
C D
---------- ----------
1001
2 1002
1003
4 1004
1005
6 1006
1007
8 1008
1009
SQL> select a,b,c,d from t1,t2 where t1.a=t2.c(+); ---不加过滤条件,会得到下面的结果集
A B C D
---------- ---------- ---------- ----------
2 102 2 1002
4 104 4 1004
6 106 6 1006
8 108 8 1008
5 105
3 103
1 101
7 107
9 109
SQL> select a,b,c,d from t1,t2 where t1.a=t2.c(+) and t2.d>1001; --但是加了过滤调价t2.d>1001后发现直接外链接就没作用了
A B C D
---------- ---------- ---------- ----------
2 102 2 1002
4 104 4 1004
6 106 6 1006
8 108 8 1008
SQL> select a,b,c,d from t1,t2 where t1.a=t2.c(+) and t2.d(+)>1001; ---改成t2.d(+)>1001,查询又会继续走外链接
A B C D
---------- ---------- ---------- ----------
2 102 2 1002
4 104 4 1004
6 106 6 1006
8 108 8 1008
5 105
3 103
1 101
7 107
9 109
结论:当表连接使用外连接时,如果where字句包含多个条件,必须在所有条件中都增加(+)操作符,否则外链接很有可能直接不起作用的,
谨以此记录一下
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28473562/viewspace-1819942/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28473562/viewspace-1819942/
相关文章推荐
- CodeIgniter需要注意错写查询条件导致数据库索引失效的问题
- Oracle SQL查询,日期过滤条件要注意的一点
- oracle学习之基本查询和条件过滤,分组函数使用
- Oracle中查询时候使index索引失效的限制条件
- 优化之后的多条件查询窗体,支持多表链接,查询过滤
- oracle中无法查询中文条件
- Hibernate @OneToMany等注解设置查询过滤条件等
- Oracle中的SUM条件查询
- oracle 存储过程中,解决变量使用 in条件时,查询无效问题
- Oracle 中按条件过滤重复记录
- MySQL 查询语句SELECT和数据条件过滤
- Oracle中使用正则表达式过滤查询结果
- MYSQL高级查找操作——内外连接、子、分组、过滤条件、正则表达式查询
- oracle 条件查询,比较运算符,逻辑运算符,特殊运算符,判断空值,大小写敏感,多行,多列子查询
- 查询条件左边写入函数,导致无法命中索引
- solr查询索引,各种查询,查询字符串,过滤查询,条件查询,排序查询、分页查询、高亮查询
- vc++6.0中使用OCCI前的配置 链接oracle查询数据的示例
- Oracle中不同条件的日期查询
- oracle 查询当天数据的sql条件写法
- mongo查询过滤条件java实例($and,$or,$eq,$ne)