2012-04-30 147 views
1

我有3個oracle表。 A加入到B和B加入到C.我想從在B或C.是否存在相應的記錄中的irerspective所有記錄我寫了這樣的查詢:oracle外連接查詢

select a.name from a,b,c where a.a_id = b.b_id(+) and b.b_id = c.c_id(+) 

這個查詢看起來不正確我特別是第二次加入。如果在A中有記錄,但在B和C中沒有相應記錄,那麼究竟會發生什麼?它仍會獲取記錄嗎?

由於某種原因,上述查詢返回的記錄數爲select a.name from a 所以我猜測查詢是正確的?還有沒有更好的方法來重寫查詢?

+0

的一個行會,無論返回是否有匹配ID的任何行在b或c中。現在會發生什麼,如果id爲1有一行,一行和一行沒有? b.b_id是空的...所以...嘗試一下。 – joshp

+0

謝謝。如果對於a中的id 1,沒有b行,那麼如何有一個c行? c與a沒有直接關係?你能解釋一下嗎? – Victor

+0

你明白了。由於沒有b行,因此b.b_id爲null,即使存在c行,也不會檢索它。考慮一下,當你正在寫這種連接。 – joshp

回答

0

我相信更好的查詢可以

Select a.name from A a left join B b on a.a_id=b.b_id inner join C c on b.b_id=c.c_id 

這應該給的結果如你預期

http://rajanmaharjan.com.np