我也没试过写这么多+,看是不是这样
select X.sfzmhm
from X, A, B, C, D, E, F
WHERE X.sfzmhm = A.sfzmhm(+)
AND X.sfzmhm = B.sfzmhm(+)
and B.id >= 1
AND C.sfzmhm(+) = X.sfzmhm
AND D.sfzmhm(+) = X.sfzmhm
and D.hm(+) = B.id
AND A.mc = E.bh(+)
AND F.sn(+) = C.sn
and F.lx(+) = B.id
select X.sfzmhm
from X, A, B, C, D, E, F
WHERE X.sfzmhm = A.sfzmhm(+)
AND X.sfzmhm = B.sfzmhm(+)
and B.id >= 1
AND C.sfzmhm(+) = X.sfzmhm
AND D.sfzmhm(+) = X.sfzmhm
and D.hm(+) = B.id
AND A.mc = E.bh(+)
AND F.sn(+) = C.sn
and F.lx(+) = B.id
对 刚才编辑时编辑错了,我实际是这样写的:select X.sfzmhm from X,A,B,C,D,E,F
where X.sfzmhm = A.sfzmhm(+)
and
X.sfzmhm = B.sfzmhm(+) and B.id(+)>=1
and
X.sfzmhm = C.sfzmhm(+)
and
X.sfzmhm = D.sfzmhm(+) and D.hm=B.id
and
A.mc = E.bh
and
F.sn=C.sn and F.lx=B.id!!!!!!!!!!!但是查出来结果比left join少了很多!
left join似乎是连起来最后再筛选,
(+)似乎是先筛选了再连.
怎样才能达到left join的效果而又不用left join呢?
对 刚才编辑时编辑错了,我实际是这样写的:select X.sfzmhm from X,A,B,C,D,E,F
where X.sfzmhm = A.sfzmhm(+)
and
X.sfzmhm = B.sfzmhm(+) and B.id(+)>=1
and
X.sfzmhm = C.sfzmhm(+)
and
X.sfzmhm = D.sfzmhm(+) and D.hm=B.id
and
A.mc = E.bh
and
F.sn=C.sn and F.lx=B.id!!!!!!!!!!!但是查出来结果比left join少了很多!
你的E和F已经inter join了,肯定少了阿
对 刚才编辑时编辑错了,我实际是这样写的:select X.sfzmhm from X,A,B,C,D,E,F
where X.sfzmhm = A.sfzmhm(+)
and
X.sfzmhm = B.sfzmhm(+) and B.id(+)>=1
and
X.sfzmhm = C.sfzmhm(+)
and
X.sfzmhm = D.sfzmhm(+) and D.hm=B.id
and
A.mc = E.bh
and
F.sn=C.sn and F.lx=B.id!!!!!!!!!!!但是查出来结果比left join少了很多!
你的E和F已经inter join了,肯定少了阿但按你的写法加进(+)的话报:ORA_01417:表可以外部连接到至多一个其他的表
哈哈,你是不是用的pro c啊,我前段时间也是,pro c中不支持left join,但支持+的写法。
其实你写的已经差不多了,只是不要把left join写为inner/right join了,写的仔细点就ok了
但按你的写法加进(+)的话报:ORA_01417:表可以外部连接到至多一个其他的表
哦,那错了,你研究好了怎么写也教教我啊
left join 子句o条件数>1的怎样先筛选再(+)呢?
我这边也有用pro*c,但这次是为解决固化试图创建的问题,固化试图也不支持join
left join 子句o条件数>1的怎样先筛选再(+)呢?
我这边也有用pro*c,但这次是为解决固化试图创建的问题,固化试图也不支持join
例如:
select *
from x, (select id,enabled from a where a.enabled=1) y
where x.id=y.id(+);
left join 子句o条件数>1的怎样先筛选再(+)呢?
我这边也有用pro*c,但这次是为解决固化试图创建的问题,固化试图也不支持join
例如:
select *
from x, (select id,enabled from a where a.enabled=1) y
where x.id=y.id(+);但是这里a.enabled=1中的1不是1,而是其他表的某字段,会抱错
比如:
select * from c,(select * from a,b where a.id=b.id)t1 where c.id=t1.id(+);
这样你一看就会很清楚执行顺序
+1,①多张表时建议用子查询,SQL结构会清晰很多。
②用(+)代替left outer join时要在每个关联字段都加上(+)标志否则当有NULL值时很容易产生错误数据。