2012-04-23 29 views
0

我對SQL相當陌生,我試圖將一些Oracle命令轉換爲SQL Server。問題在於轉換下面右外連接:將Oracle右外連接翻譯成SQL Server

where 
    SOURCE_FORMATS.LOC_SIMPLE_ENTITY_ID = FILEFORMAT_INTERNAL_SIGNATURES.LOC_FILEFORMAT_ID (+) 

至於我可以在SQL明白這一點已在「從」部分是這樣來表示:

from 
    SIMPLE_ENTITIES "SOURCE_FORMATS" 
RIGHT OUTER JOIN FILEFORMAT_INTERNAL_SIGNATURES 
on SOURCE_FORMATS.LOC_SIMPLE_ENTITY_ID = FILEFORMAT_INTERNAL_SIGNATURES.LOC_FILEFORMAT_ID 

是這個邏輯正確嗎?

+0

是的,這是正確的,它是*更好*的解決方案,也因爲它順應瞭如何寫的ANSI標準JOIN的 - 我更喜歡這一點在Oracle格式的任何一天。 – 2012-04-23 10:45:03

+3

不,我認爲第一個查詢是一個左連接。 – 2012-04-23 10:51:43

+1

Oracle已經支持ANSI外連接語法十多年了(從2001年的9.0版開始)。舊的(+)語法是Oracle在建立ANSI連接語法之前的語法。我相信當時其他的RDBMS具有類似的專有語法,如'* =' – 2012-04-23 11:25:03

回答

2

在用於外連接的ANSI-Oracle之前的語法中,(+)用於預期缺陷的表,而不是針對要保留的表。

所以:

select * from t1, t2 where t1.col1 = t2.col2 (+) 

相同

select * from t1 left join t2 on t1.col1 = t2.col2 
+0

好的答案,我喜歡這個簡單的例子。謝謝 – Fraser 2012-04-23 13:01:19

+0

謝謝大家指出這是一個左連接,而不是一個正確的連接 – Fraser 2012-04-23 13:01:51