【发布时间】:2011-01-06 21:04:12
【问题描述】:
我总是不鼓励使用一种方法,但有没有一种情况是最好的方法?
【问题讨论】:
标签: sql sql-server
我总是不鼓励使用一种方法,但有没有一种情况是最好的方法?
【问题讨论】:
标签: sql sql-server
这很少见,但我有一些使用它的案例。通常在异常报告或ETL 或其他非常特殊的情况下,双方都有您要合并的数据。
另一种方法是使用INNER JOIN、LEFT JOIN(右侧为IS NULL)和RIGHT JOIN(左侧为IS NULL)并使用UNION - 有时这种方法更好,因为您可以更明显地自定义每个单独的连接(并添加一个派生列以指示找到哪一方或是否在双方都找到以及哪一方将获胜)。
【讨论】:
我注意到维基百科页面provides an example。
例如,这可以让我们看到 一个部门的每个员工 每个部门都有一个 员工,还能看到每个员工 谁不是部门的一部分,并且 每个没有一个部门 员工。
请注意,我在实践中从未遇到过完全外部联接的需要...
【讨论】:
在尝试从我的两个表中查找不匹配的孤立数据时,我使用了完全外连接,并且想要我的所有结果集,而不仅仅是匹配项。
【讨论】:
我很少使用它来测试连接两侧的 NULL,以防我认为我正在测试的 SQL 中使用的初始 INNER JOIN 中缺少数据。
【讨论】:
它们对于查找孤立数据很方便,但我很少在生产代码中使用它们。我不会“总是不鼓励使用”,但我认为在现实世界中,与内部和左/右外部相比,它们通常不是最佳解决方案。
【讨论】:
在极少数情况下,我使用Full Outer Join 用于数据分析和比较目的,例如比较来自不同数据库的两个客户表以找出每个表中的重复项或比较两个表结构,或者找出一个表中的空值与另一个表相比,或者在一个表中与另一个表相比查找缺失的信息。
【讨论】:
就在今天,我不得不使用完全外连接。在比较两个表的情况下很方便。例如,我比较的两个表来自不同的系统,所以我想获得以下信息:
此外,我在 SELECT 语句中创建了一个附加字段,该字段使用 CASE 语句来“注释”我标记这一行的原因。示例:利率不匹配/系统 A 中不存在该帐户等。
然后将其保存为视图。现在,我可以使用此视图创建报告并将其发送给用户以进行数据更正/输入,或者使用它通过我使用 CASE 语句创建的“评论”字段来提取特定人群(例如:所有具有不匹配兴趣的记录率)在我的存储过程中并自动更正等。
如果您想查看示例,请告诉我。
【讨论】: