2014-02-09 26 views
-1

我正在使用Microsoft SQL Server 2012.我有兩個表T1和T2,它們都有一個ID列。自然全外連接在我的SQL Server Management Studio中不起作用

當我在微軟SQL Server Management Studio中

select ID 
from T1 
natural full outer join T2 

輸入下面的SQL語句,它生成以下錯誤:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'T2'.

但是,Microsoft SQL Server Management Studio中接受以下聲明,我認爲是等同聲明:

select ID 
from T1 
full outer join T2 ON t1.ID = T2.ID 

SQL Server Management Studio是否不支持自然完整外連接?

+0

有沒有天然的SQL Server連接,你必須明確地告訴SQL服務器要使用的關鍵詞如右圖做加盟,左或最加入 –

+2

您是否檢查過大量免費的[SQL Server Books Online文檔?](http://technet.microsoft.com/zh-cn/library/bb510741.aspx) –

+0

這不是「SQL Server Management Studio」,它拒絕或接受查詢,它是SQL Server(後端) –

回答

0

在Sql服務器中沒有自然聯接,您必須明確地告訴sql server您希望表加入哪些字段。

1)使用ON子句並顯式使用兩個表中的列名。

2)或者在舊的JOIN語法中明確使用WHERE子句中兩個表的列名。

關於這個主題的另一個很好的答案Read here

+0

我對查詢做了幾項測試,我認爲 select * from t1 left left outer join t2 ON t1.ID = t2.ID 等價於 select * from t1,t2 WHERE t1.ID = t2.ID 你能證實這是真的嗎? 謝謝 –

+0

自然連接意味着如果在兩個表中有兩個同名的列,它們將使用它們的列連接表。不能保證哪些列將被用於加入或更多表格。非常不可靠和非常意想不到的結果。現在什麼是SQL Server中的自然連接等價物,沒有任何,SQL服務器不會連接兩個表,除非它告訴哪些字段要連接這些表,還必須明確使用左,右或全連接關鍵字來獲得結果。 –

+0

如果你不使用任何關鍵字如LEFT RIGHT或INNER,在SQL Server中還有一件事,默認情況下,Sql服務器會進行INNER JOIN,但對於任何其他類型的連接,您必須明確使用關鍵字RIGHT,LEFT或FULL 。 –

1

SQL Server/Transact SQL根本不支持自然連接語法。

順便說一句,是解析器不抱怨「自然」,因爲它假定這是一個表的別名:-)

+0

我想我有幾個後續問題。 是「從T1全外連接中選擇ID T2 ON t1.ID = T2.ID」與使用自然連接相同嗎? 另外,如何在不使用外連接的情況下編寫等效語句? 謝謝 –

+0

全外連接和自然連接根據定義不同。這取決於你想要做什麼。正如你可能已經知道的那樣,自然連接是一種equi連接,但是隻有一個表中的列(如果存在相同的列名)被返回。 –

相關問題