我这里有条SQL, left join 5张表,比如 a left join b left join c left join d left join e
我的本意是a,b join后和C join然后再和 d ,得到的数据再和e join
但是ORACLE会根据表的大小来自动选择join的驱动表,导致数据丢失。
难道大家在写多个left join会加括号吗?
你们这里说的丢失是数据查询不出来吗??
其实也不是差不出数据来. left outer join b 后在有b 的限制条件.
eg:
select * from t1, t2 where t1.col1=t2.col1(+) and t2.col2=val 但不满足t2.col2=val 时t1的数据显示不全.(做个子查询就可以)
如果用子查询就是
select * from t1, (select * from t2 where t2.col2=val) t where t1.col1=t.col1 , 就是lz所说的用括号.
如果用left outer join :
select * from t1 left outer join t2 on t1.col1=t2.col1 and t2.col2=val.
我想lz说的是这个意思.
LS的才真明白我的意思. 怎么其他人感觉没用过left join一样.
left join很明显如果顺序出问题了,数据肯定查的不全啊. 如果是inner join那就随便什么顺序了.
如果我 a left join b left join c, 一般我们认为是 a 先和b left join再和c left join, 如果ORACLE通过CBO来走计划可能会变成a 和C,然后和B.
所以我问你们是否用括号,我现在自己是用括号来解决.