2013-03-05 109 views
1

只是我已經跨越SQL查詢中像下面的存儲過程的一個傳來:(+)符號

SELECT 
    * 
FROM 
    account a, 
    performance p, 
    customer c, 
    override o 
WHERE 
    a.account_id = p.account_id (+) 
    AND a.account_id = c.account_id (+) 
    AND o.override_type(+) = 'O' 

能否請您解釋一下什麼是(+)符號的打法嗎?和使用左側和右側的區別。

在此先感謝。

+0

可能出現[Oracle SQL中的(+)做什麼?](http://stackoverflow.com/questions/1376442/what-does-do- in-oracle-sql) – Ben 2013-03-05 08:31:58

+0

雖然這是一個更好的解釋:http://stackoverflow.com/questions/1193654/difference-between-oracles-plus-notation-and-ansi-join-notation – Ben 2013-03-05 08:32:13

回答

4

這是Oracle中OUTER JOIN的舊語法(我不知道是否有其他使用相同舊語法的RDBMS)。

小康:使用使用LEFT OUTER JOINRIGHT OUTER JOIN,而不是+符號明確ANSI-92 OUTER JOIN語法。

+0

這個存儲過程有點7或8歲。感謝您澄清我的疑問。 – SuRa 2013-03-05 07:10:51

+0

@Sundar - 隨時歡迎您:)這是什麼RDBMS?它是Oracle嗎? – 2013-03-05 07:11:50

+0

這是Oracle。 – SuRa 2013-03-05 07:16:20

1

(+)是oracle(8和之前版本)中的傳統外連接語法。 這是非常嚴格的,並處理許多案件只是錯誤的。不要再使用它了。 Oracle支持從版本9開始的ansi連接(例如,left outer join)。

+0

你將不得不拿出「處理很多案例錯誤」的證據。它有各種限制,但沒有比ANSI語法多得多,有時仍被使用,因爲Oracle的ANSI語法實現有時會導致不正確的查詢計劃,而+語法不會(儘管我不喜歡使用它)。 – Ben 2013-03-05 08:35:25

+0

您不能對已經外連接的表進行外連接(例如,訂購外連接客戶外連接地址)。外連接後你甚至無法加入。在外連接表上有附加條件時會出現問題。它沒有真正的記錄。問題在於,當您編寫無效查詢時,它不會投訴。它只是返回明顯的錯誤數據。幾年前,我記得我得到的值是在整個數據庫中沒有出現在該列上的查詢返回的值。就像我喜歡Oracle數據庫一樣,這個外部連接失敗了。 – 2013-03-05 13:44:08