2012-08-01 13 views
4

是否有可能在不指定條件的情況下編寫內部連接或外部連接? 是ON condition是連接條件語法的一部分嗎?ON是語法的一部分

+1

你想達到什麼目的?如果沒有條件,則內部聯接不是內部聯接。 – deutschZuid 2012-08-02 01:00:20

+0

我認爲唯一沒有條件的連接是'CROSS JOIN'。 – 2012-09-08 08:32:15

+1

@JW。'NATURAL JOIN'也沒有明確的條件(因此沒有'ON')。但是SQL-Server沒有實現自然連接。 – 2013-02-09 14:48:36

回答

2

你可以做一個隱式連接,而無需使用聯接上語法:

select a.fred, b.joe from tableApple as a, tableBread as b 
where a.key1 = b.key1 

但我上需要明確連接好看一些。你會得到一個不正確的語法錯誤。 顯式連接意思是:

select a.fred, b.joe 
from tableApple as a 
left join tableBread as b 
on a.key1 = b.key1 
where a.key1 = 'sally' 
4

不,你不必指定ON,你可以在一個WHERE這樣做:

SELECT * 
FROM tableA, tableB 
WHERE tableA.Id = tableB.Id 

但這容易出錯(易結束與CROSS JOIN s)並且通常皺起了眉頭。參見here反對它的論點。

編輯:爲了更精確,使用可以JOIN上面顯示的老風格的語法,這不需要ON,但使用INNER | LEFT | FULL如果明確加入等,然後ON是一部分語法。 MSDN頁面提供了精確的語法要求。

12

當使用ANSI SQL-92語法時,ON關鍵字是除了cross join之外的連接的一部分,因爲您沒有該關係的條件。

ex。

INNER JOIN

SELECT * 
FROM tableA INNER JOIN tableB 
     on tableA.ID = tableB.ID 

CROSS JOIN

SELECT * 
FROM tableA CROSS JOIN tableB 

ON應連接表(加入像內外)後,應遵循這樣你就不會有語法錯誤。但如果您使用的語法爲ANSI SQL-89,則ON關鍵字被省略,但您必須指定關係where clause

前。

INNER JOIN

SELECT * 
FROM tableA, tableB 
WHERE tableA.ID = tableB.ID 

CROSS JOIN

SELECT * 
FROM tableA, tableB 

很容易出現錯誤,因爲如果你忘記了條件,也不會產生語法錯誤,很可能會做cross join

+0

+1爲真棒解釋=) – 2012-08-02 00:34:17