我總是不鼓勵使用其中一種,但是在最好的方法下會出現這種情況嗎?什麼時候使用完全外連接是一種很好的情況?
回答
這很少見,但我有一些使用它的情況。通常在例外情況報告或ETL或其他非常特殊的情況下,雙方都有您正在嘗試合併的數據。另一種方法是使用INNER JOIN,LEFT JOIN(右側IS NULL)和RIGHT JOIN(左側IS NULL)並執行UNION - 有時這種方法更好,因爲您可以更明顯地定製每個單獨的連接並添加派生列以指示找到哪一方或是否在兩者中找到了哪一方以及哪一方將獲勝)。
我注意到維基百科頁面provides an example。
例如,這讓我們看到了 每個員工誰是在一個部門 並具有一個 員工每個部門,也看到每個員工 誰是不是和每個部門一個部門的一部分 其中沒有 員工。
注意,我從來沒有遇到過一個完整的外部的連接需要在實踐中...
我用全外連接當試圖找到不匹配的,孤立的數據,無論從我的表,並希望我所有的結果集,而不僅僅是匹配。
我曾經使用過的罕見時間一直在測試連接兩側的NULL,以防我在我測試的SQL中使用的初始INNER JOIN中缺少數據。
它們在查找孤立數據時非常方便,但我很少在生產代碼中使用。我不會是「總是不鼓勵使用一個」,但我認爲在現實世界中,與內部人員和左/右外出人員相比,他們不太經常是最好的解決方案。
在我使用Full Outer Join
的極少數情況下,它用於數據分析目的,例如比較來自不同數據庫的兩個客戶表以找出每個表中的重複項或比較兩個表結構或找出一張表與另一張表相比較,或者在一張表中找到缺失的信息。
就在今天,我不得不使用Full Outer Join。在比較兩個表格的情況下,它非常方便。例如,兩個表我是比較來自不同的系統,所以我希望得到以下信息:
- 表A有不在表B
- 表B任何行有沒有在任何行表A
- 重複在任一表A或表B
- 對於匹配的行值是否是不同的(例如:表A和表B都具有會計#12345,的LoanID ABC123,但利率或貸款額是不同
另外,我在SELECT語句中創建了一個額外的字段,它使用CASE語句'評論'爲什麼要標記這一行。示例:利率不匹配/ Acct在系統A中不存在等。
然後將其保存爲視圖。現在,我可以使用此視圖創建報告並將其發送給用戶以進行數據更正/輸入,或者使用該視圖通過使用CASE語句創建的'comment'字段來拉動特定人羣(例如:所有記錄都有不匹配的興趣率)在我的存儲過程和自動校正等。
如果你想看到一個例子,讓我知道。
這就是爲什麼可重複使用的視圖(而不是那些只有一個明確的用戶和目的的視圖)往往是不鼓勵的!人們把這樣的東西放在一個視圖中,然後有人出現並用各種過濾器來使用它。接下來你知道系統被掛鉤,人們想知道爲什麼。 任何過濾幾乎都不可避免地將3個部分中的一個或多個部分丟棄到這樣的結果集(內部,左側或右側)。當使用Full時,查詢優化器沒有辦法放棄不相關的連接,因此需要做大量的額外工作才能將其扔在Filter步驟中。 – bielawski 2017-08-10 14:54:14
- 1. 如何在沒有完全外連接的情況下完成全外連接
- 2. 這種情況下最好的情況是什麼?
- 3. 什麼將是一個很好的(de)壓縮爲這種情況
- 4. 在這種情況下返回參考是否是一種很好的風格?
- 5. 什麼時候在這種情況下實例化對象?
- 6. 在這種情況下 - 什麼更好有很多或有很多通過?
- 7. 什麼是使用連接池在我的情況
- 8. 在什麼情況下使用typeof運算符很好?
- 9. 什麼時候在PHP上使用異常很好?
- 10. 這種情況下最好的數據結構是什麼?
- 11. 這種情況下最好的排序算法是什麼?
- 12. 這種情況下最好的數據庫結構是什麼?
- 13. 這種情況下最好的做法是什麼?
- 14. 這種情況下最好的項目設置是什麼?
- 15. 什麼是這種情況下最好的數據庫結構?
- 16. 什麼是這種情況下更好的ActiveRecord查詢
- 17. 在這種情況下使用什麼會更好? C#或PHP?
- 18. 在這種情況下使用發電機有什麼好處?
- 19. HidD_SetFeature()很好用,HidD_GetFeature()失敗,ERROR_CRC(23)。什麼會造成這種情況?
- 20. WCF安全,什麼在這種情況下使用
- 21. 使用多個連接語句完成外部連接的邏輯是什麼?
- 22. 什麼時候使用螺旋鎖是一個好主意?
- 23. 爲什麼Linq2EF連接生成一個完整的外連接?
- 24. Decorator模式很好地解決問題的一些情況是什麼?
- 25. 什麼時候是Malloc的好主意?
- 26. 爲什麼是這種情況gc
- 27. 這種情況測試是什麼?
- 28. 什麼是在這種情況下
- 29. 什麼是在這種情況下
- 30. mysql沒有連接,但爲什麼會發生這種情況
+1替代選項:) – 2010-01-19 16:02:50