簡體   English   中英

在MySQL中聯接與其他方法

[英]Joins vs. other methods in 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

誰能向我解釋這樣做而不是使用聯接的含義。 如我所說,在這種特殊情況下,它確實返回與聯接相同的數據,但是否總是如此?

它只是碰巧具有相同的結果,但在某些時候卻不會,因為您的查詢具有外部聯接,因此它們為您提供的語法是隱式內部聯接。

http://en.wikipedia.org/wiki/Join_(SQL

這是一個聯接,只是一個隱式聯接。 這是一種不良的編碼實踐,應替換為內部聯接。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM