2009-09-05 26 views
2

我見過的人寫下面的查詢加入在MYSQL5

SELECT column_name(s) 
FROM table_name1 
LEFT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name 

這樣寫的

SELECT column_name(s) 
FROM table_name1 
LEFT JOIN table_name2 
ON table_name2.column_name =table_name1.column_name 

它實際上有什麼區別?

回答

4

不是在正常情況下,沒有。可以想象,可能存在一些足夠複雜的查詢,比您的示例複雜得多,在這種情況下,連接優化器會如此不堪重負,以至於這可能很重要,但如果這甚至可能,您必須努力工作。順便說一句,你可以把這兩個都寫成USING (column_name)。 :)

我也建議,爲了DIY問題分析這樣的問題,你要熟悉EXPLAIN

+0

'USING'不支持其他RDBMS,並且如果您需要遷移,可能會導致一個痛苦。 – 2009-09-05 18:23:39

7

沒有區別。

table_name1.column_name=table_name2.column_name 

table_name2.column_name=table_name1.column_name 

具有相同的含義。

連接的「左」部分是指表而不是比較 - 我猜這是你的隱含問題?

0

這很可能是個人品味的問題;我恰好會像第二個例子那樣寫入連接,但不能說我在做這件事時100%一致。另外,回到糟糕的舊時代,當查詢優化器不像現在那樣聰明時,您會發現重新排序連接表達式或WHERE子句中的操作數可能會產生重大影響;即,如果操作數是單向排序的,但優化程序在倒轉時不會使用索引。

我想我有一個Oracle 7 flasback。躺下來...

相關問題