何时使用完全外连接是一个好的情况?

Nic*_*ick 42 sql sql-server

我总是不鼓励使用它,但有什么情况是最好的方法吗?

Cad*_*oux 43

这很罕见,但我有一些使用它的情况.通常在异常报告或ETL或其他非常特殊的情况下,双方都有您试图合并的数据.
另一种方法是使用a INNER JOIN,a LEFT JOIN(右侧IS NULL)和RIGHT JOIN(左侧IS NULL)并执行UNION- 有时这种方法更好,因为您可以更明显地自定义每个单独的连接(并添加派生列以指示找到哪一侧)或者是否在两者中都找到了,哪一个会赢?


ewe*_*nli 22

我注意到维基百科页面提供了一个例子.

例如,这允许我们查看部门中的每个员工以及拥有员工的每个部门,还可以查看不属于部门的每个员工以及没有员工的每个部门.

请注意,我在实践中从未遇到过需要完全外连接的问题......


Geo*_*ton 16

我试图从我的两个表中找到不匹配的孤立数据并且想要我的所有结果集,而不仅仅是匹配时,我使用了完全外连接.


kev*_*ers 7

我很少使用它来测试连接两侧的 NULL,以防我认为我正在测试的 SQL 中使用的初始 INNER JOIN 中缺少数据。


gin*_*boy 5

它们可以很方便地查找孤立数据,但我很少在生产代码中使用它们。我不会“总是不鼓励使用一个”,但我认为在现实世界中,与内部和左/右外部相比,它们通常不是最佳解决方案。


Ash*_*ada 5

在极少数情况下,我将Full Outer Join它用于数据分析和比较目的,例如比较来自不同数据库的两个客户表以找出每个表中的重复项或比较两个表结构,或者找出比较的一个表中的空值到另一个表中,或者在一个表中与另一个表相比查找缺失的信息。


Non*_*mer 5

就在今天,我不得不使用完全外部联接。在比较两个表的情况下非常方便。例如,我正在比较的两个表来自不同的系统,因此我想获得以下信息:

  1. 表A包含表B中没有的任何行
  2. 表B包含表A中没有的任何行
  3. 表A或表B中的重复项
  4. 对于匹配的行,值是否不同(示例:表A和表B都具有Acct#12345,LoanID abc123,但是利率或贷款金额不同

另外,我在SELECT语句中创建了一个附加字段,该字段使用CASE语句“注释”我标记该行的原因。示例:利率不匹配/系统A中不存在帐户等。

然后将其保存为视图。现在,我可以使用此视图创建报告并将其发送给用户以进行数据更正/输入,也可以使用它通过我使用CASE语句创建的“评论”字段来拉取特定人群(例如:所有兴趣不匹配的记录费率)并自动更正等。

如果您想看个例子,请告诉我。

  • 我认为你看错了。我别无选择,只能创建一个完全连接,因为我正在比较两个不同的系统。这种观点是一种完整性。如果您有适当的流程(代码测试/批准等),它将防止“有人出现”并多次使用此视图。 (2认同)