2010-12-01 71 views
1

我完全是自學的,所以在我的知識中存在明顯的差距。當我需要從多個表中獲取數據時,我學會了如何進行連接。例如,如果我需要一個憑證號,賬號,並從憑證表的平衡,並從另一個表中的相應的地址,我應該這樣做:mySQL中的連接與其他方法

select v.voucherNbr, v.balanceInit, v.acctID, a.address, a.city from vouchers v 
left join addresses a on v.acctID = a.id 

這將返回所有的憑證記錄,任何地址碰巧存在(在這種情況下,即使沒有相應的地址,我們也要返回憑證記錄,因此左連接。)

我最近繼承了一些代碼,似乎試圖獲取相同的數據(並在這種情況下,它確實返回正確的記錄),它是這樣做的:

select v.voucherNbr, v.balanceInit, v.acctID, a.address, a.city from vouchers v, addresses a 
where v.acctID = a.id 

任何人都可以向我解釋這樣做,而不是使用連接的影響。正如我所說的,在這種特殊情況下,它確實會返回與連接相同的數據,但它會一直存在嗎?

回答

3

這是一個連接,只是一個隱含的連接。這是一種糟糕的編碼習慣,應該用一個內部連接來代替。

這個過時代碼的問題在於,意外創建交叉連接並且代碼難以維護(您不應該在同一個查詢中混合隱式和顯式連接,否則您可能會得到錯誤的結果)非常容易。