当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符
这句话是不是不正确啊, 好想只要连接字段的条件加(+)操作符就可以了吧
select a.dname,b.ename from dept a,emp b where a.deptno=b.deptno(+) and b.deptno(+)=10
and 等等,都要用(+)操作符吗,
我看我们的项目中,好多语句都只是连接字段中使用(+),其他的条件都没有写,会不会有错误啊
我在这里就讨论这个问题,不是讨论用不用(+)的问题, oracle 9i开始就建议使用outer join执行外连接
------解决方案--------------------
个人习惯了
------解决方案--------------------
他语文没学好而已。
+代表on的条件,就算两个值不等,如果左右连接,也能出来相应的行。
没有+代表where条件(也可以看成是inner join),两个值不等的根本不会出现在结果集中
------解决方案--------------------
哈哈,习惯很可怕~不过不影响使用
------解决方案--------------------
- SQL code
create table t1(id varchar2(50),name varchar2(50));create table t2(id varchar2(50),name varchar2(50));insert into t1 values ('1','a');insert into t1 values ('2','b');insert into t1 values ('3','c');insert into t2 values ('1','d');insert into t2 values ('4','f');select * from t1,t2 where t1.id=t2.id(+) and t2.name='d' --t2.name 不加(+)ID NAME ID NAME----------------------------------- --1 a 1 dselect * from t1,t2 where t1.id=t2.id(+) and t2.name(+)='d' --t2.name 加(+)ID NAME ID NAME---------------- --------------------- 1 a 1 d3 c 2 b
------解决方案--------------------
顶这个呀:------解决方案--------------------
select a.dname,b.ename from dept a,emp b where a.deptno=b.deptno(+) and b.deptno(+)=10
像这种的b表每个字段都要加(+)的,因为如果不加的话相当于对b表直接过滤了,那就跟全没加(+)号一样了,变成了等值连接,不等值的b表行全抛弃。
------解决方案--------------------
------解决方案--------------------
除了连接条件加(+)
如果其他条件是针对从表的,那应该加(+)
就相当于
select * from t1,t2 where t1.id=t2.id(+) and t2.name='d' --t2.name 不加(+)
同
select * from t1
left join t2 on t1.id=t2.id
where t2.name='d'
select * from t1,t2 where t1.id=t2.id(+) and t2.name(+)='d' --t2.name 加(+)
同
select * from t1
left join t2 on t1.id=t2.id and t2.name='d'
不过个人坚决反对使用(+)
更BS那些对(+)都没我了解的新人
老是模仿老手们的写法
还以为自己懂得高效率