刚刚试验过了 总算把问题弄懂了 为避免误导他人。。将试验的结果写下oraclemch说用右外连接 我咋一想 就认为这样select * from table_A left outer join talbe_B on table_A.col_01=tahle_B.col_01 right outer join table_C on table_B.col_02=table_C.col_02但我建了三个表 并插入数据后(其中每个表都保持有空数据) 结果发现跟原查询不对等 后来想想 试了下 wildwave说的 select * from table_A left outer join talbe_B on (table_A.col_01=table_B.col_01) left outer join table_C on (table_B.col_02=table_C.col_02); 却发现对等 我就迷糊了 就找了找一开始自己写的程序 后来才发现是自己程序中就有错误 直接两个 left outer join就行了。我仔细想了想,大概就是 table_A left outer join talbe_B on (table_A.col_01=table_B.col_01) 这里生成了一个A*B的结果,然后 table_C on (table_B.col_02=table_C.col_02);这里不是A跟C连的,是A*B里边B的所属字段在跟C连哎 学艺不精 还是老老实实仔细看书去。。给分 结贴。。
table_A
left outer join
talbe_B on (table_A.col_01=table_B.col_01)
left outer join
table_C on (table_B.col_02=table_C.col_02); 这样不就行了
这里是左外连接 按照这种写法的话 将 table_A当源表了 而题意中 table_B.col_02=table_C.col_02(+)这里 table_B是源表哦。。
由于万恶的postgre或者说万恶的oracle不遵守SQL92 所以现在移植存储过程改惨我了 这个问题 以前从没细想过。。现在仔细一想 头真大 虽然用存储过程能绕过去 但还是想彻底搞清楚。。
table_A
left outer join talbe_B on table_A.col_01=tahle_B.col_01
right outer join table_C on table_B.col_02=table_C.col_02但我建了三个表 并插入数据后(其中每个表都保持有空数据)
结果发现跟原查询不对等
后来想想 试了下 wildwave说的
select * from
table_A
left outer join
talbe_B on (table_A.col_01=table_B.col_01)
left outer join
table_C on (table_B.col_02=table_C.col_02);
却发现对等 我就迷糊了 就找了找一开始自己写的程序 后来才发现是自己程序中就有错误
直接两个 left outer join就行了。我仔细想了想,大概就是
table_A
left outer join
talbe_B on (table_A.col_01=table_B.col_01)
这里生成了一个A*B的结果,然后 table_C on (table_B.col_02=table_C.col_02);这里不是A跟C连的,是A*B里边B的所属字段在跟C连哎 学艺不精 还是老老实实仔细看书去。。给分 结贴。。