2013-05-09 19 views
57

是否可以在沒有ON聲明的情況下編寫連接查詢?以及這些連接如何不同LEFT JOIN, RIGHT JOIN的作品。如何在沒有開啓條件的情況下使用mysql JOIN?

+0

由於「ON」子句告訴服務器表是如何相關的,所以沒有。如果你的不同連接類型都給出相同的結果,那麼你會以某種方式做錯,並且添加一些代碼可以幫助我們發現你的問題。同時,請轉到[Jeff Atwood的博客](http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html)2分鐘介紹不同的連接類型。 – fvu 2013-05-09 21:04:40

回答

84

MySQL documentation涵蓋了這個主題。

這裏是一個簡介。當使用joininner join時,on條件是可選的。這與ANSI標準不同,幾乎與其他任何數據庫不同。效果是cross join。同樣,您可以使用on子句與cross join,這也與標準SQL不同。

交叉連接創建一個笛卡爾積 - 也就是說,從第一個表格開始的1行和從第二個開始的1行的每個可能的組合。具有三行('a','b'和'c')以及具有四行(例如1,2,3,4)的表的交叉連接將具有12行。

在實踐中,如果你想要做一個交叉連接,然後使用cross join

from A cross join B 

比要好得多:

from A, B 

和:

from A join B -- with no on clause 

on子句是右外連接或左外連接所必需的,因此討論是不相關的爲他們。

如果您需要了解不同類型的連接,那麼您需要對關係數據庫進行一些研究。 Stackoverflow不適合討論這個級別。

相關問題