2010-01-19 46 views

回答

19

這很少見,但我有一些使用它的情況。通常在例外情況報告或ETL或其他非常特殊的情況下,雙方都有您正在嘗試合併的數據。另一種方法是使用INNER JOIN,LEFT JOIN(右側IS NULL)和RIGHT JOIN(左側IS NULL)並執行UNION - 有時這種方法更好,因爲您可以更明顯地定製每個單獨的連接並添加派生列以指示找到哪一方或是否在兩者中找到了哪一方以及哪一方將獲勝)。

+1

+1替代選項:) – 2010-01-19 16:02:50

9

我注意到維基百科頁面provides an example

例如,這讓我們看到了 每個員工誰是在一個部門 並具有一個 員工每個部門,也看到每個員工 誰是不是和每個部門一個部門的一部分 其中沒有 員工。

注意,我從來沒有遇到過一個完整的外部的連接需要在實踐中...

8

我用全外連接當試圖找到不匹配的,孤立的數據,無論從我的表,並希望我所有的結果集,而不僅僅是匹配。

1

我曾經使用過的罕見時間一直在測試連接兩側的NULL,以防我在我測試的SQL中使用的初始INNER JOIN中缺少數據。

0

它們在查找孤立數據時非常方便,但我很少在生產代碼中使用。我不會是「總是不鼓勵使用一個」,但我認爲在現實世界中,與內部人員和左/右外出人員相比,他們不太經常是最好的解決方案。

0

在我使用Full Outer Join的極少數情況下,它用於數據分析目的,例如比較來自不同數據庫的兩個客戶表以找出每個表中的重複項或比較兩個表結構或找出一張表與另一張表相比較,或者在一張表中找到缺失的信息。

0

就在今天,我不得不使用Full Outer Join。在比較兩個表格的情況下,它非常方便。例如,兩個表我是比較來自不同的系統,所以我希望得到以下信息:

  1. 表A有不在表B
  2. 表B任何行有沒有在任何行表A
  3. 重複在任一表A或表B
  4. 對於匹配的行值是否是不同的(例如:表A和表B都具有會計#12345,的LoanID ABC123,但利率或貸款額是不同

另外,我在SELECT語句中創建了一個額外的字段,它使用CASE語句'評論'爲什麼要標記這一行。示例:利率不匹配/ Acct在系統A中不存在等。

然後將其保存爲視圖。現在,我可以使用此視圖創建報告並將其發送給用戶以進行數據更正/輸入,或者使用該視圖通過使用CASE語句創建的'comment'字段來拉動特定人羣(例如:所有記錄都有不匹配的興趣率)在我的存儲過程和自動校正等。

如果你想看到一個例子,讓我知道。

+0

這就是爲什麼可重複使用的視圖(而不是那些只有一個明確的用戶和目的的視圖)往往是不鼓勵的!人們把這樣的東西放在一個視圖中,然後有人出現並用各種過濾器來使用它。接下來你知道系統被掛鉤,人們想知道爲什麼。 任何過濾幾乎都不可避免地將3個部分中的一個或多個部分丟棄到這樣的結果集(內部,左側或右側)。當使用Full時,查詢優化器沒有辦法放棄不相關的連接,因此需要做大量的額外工作才能將其扔在Filter步驟中。 – bielawski 2017-08-10 14:54:14

相關問題