我总是不鼓励使用一个,但有没有一种情况下,这是最好的方法?
ryhaxcpt1#
这种情况很少见,但我有一些使用它的案例,通常是在异常报告或ETL或其他非常特殊的情况下,双方都有数据要合并。另一种方法是使用INNER JOIN,一个LEFT JOIN(带右侧IS NULL)和一个RIGHT JOIN(使用左侧IS NULL)并执行UNION-有时这种方法更好,因为您可以更明显地定制每个单独的连接(并添加一个派生列,以指示找到哪一方,或者是否在双方中都找到,以及哪一方将获胜)。
INNER JOIN
LEFT JOIN
IS NULL
RIGHT JOIN
UNION
9q78igpj2#
我注意到维基百科页面提供了一个例子。例如,这允许我们查看部门中的每个雇员以及拥有雇员的每个部门,但也可以查看不属于部门的每个雇员以及没有雇员的每个部门。请注意,我在实践中从未遇到过完全外部连接的需要...
3htmauhk3#
当试图从我的两个表中查找不匹配的孤立数据时,我使用了完全外部连接,并且希望得到我的所有结果集,而不仅仅是匹配项。
rur96b6h4#
就在今天,我不得不使用完全外部联接。在比较两个表的情况下,它很方便。例如,我比较的两个表来自不同的系统,所以我想获得以下信息:1.表A中有表B中没有的行1.表B中有表A中没有的行1.表A或表B中重复1.对于匹配行,值是否不同(例如:表A和表B都有Acct# 12345,LoanID abc123,但利率或贷款金额不同此外,我在SELECT语句中创建了一个额外的字段,该字段使用CASE语句来“注解”标记此行的原因。利率不匹配/系统A中不存在该账户等然后将其保存为视图。现在,我可以使用此视图创建报表并将其发送给用户以进行数据更正/输入,或者使用此视图通过使用CASE语句创建的“注解”字段提取特定人口(例如:具有不匹配利率的所有记录)并自动校正等。如果你想看例子,告诉我。
esbemjvw5#
我很少使用它的时候是在连接两端测试NULL,以防我认为我正在测试的SQL中使用的初始INNER JOIN缺少数据。
sdnqo3pr6#
它们对于查找孤立数据很方便,但我很少在生产代码中使用它们。我不会**“总是不鼓励使用一个”**,但我认为在真实的世界中,与内部和左/右外部相比,它们通常不是最佳解决方案。
pxq42qpu7#
在我很少使用Full Outer Join的时候,它是用于数据分析和比较的目的,例如比较来自不同数据库的两个客户表,以找出每个表中的重复项,或者比较两个表的结构,或者找出一个表与另一个表相比的空值,或者找出一个表与另一个表相比的缺失信息。
Full Outer Join
7xzttuei8#
例如,假设您有两个表:一个包含客户数据,另一个包含订单数据。完全外部联接允许您查看所有客户和所有订单,即使某些客户没有订单或某些订单没有对应的客户也是如此。这可以帮助您确定数据中的任何差距,并确保所有相关信息都包含在结果集中。需要注意的是,完全外部联接可能会产生巨大的结果集,因为它包含两个表中的所有行。这可能会降低性能,因此最好仅在需要包含两个表中的所有行时才使用完全外部联接。
SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
这将返回table1和table2中的所有行,并为两侧缺少的匹配项填充NULL值。
8条答案
按热度按时间ryhaxcpt1#
这种情况很少见,但我有一些使用它的案例,通常是在异常报告或ETL或其他非常特殊的情况下,双方都有数据要合并。
另一种方法是使用
INNER JOIN
,一个LEFT JOIN
(带右侧IS NULL
)和一个RIGHT JOIN
(使用左侧IS NULL
)并执行UNION
-有时这种方法更好,因为您可以更明显地定制每个单独的连接(并添加一个派生列,以指示找到哪一方,或者是否在双方中都找到,以及哪一方将获胜)。9q78igpj2#
我注意到维基百科页面提供了一个例子。
例如,这允许我们查看部门中的每个雇员以及拥有雇员的每个部门,但也可以查看不属于部门的每个雇员以及没有雇员的每个部门。
请注意,我在实践中从未遇到过完全外部连接的需要...
3htmauhk3#
当试图从我的两个表中查找不匹配的孤立数据时,我使用了完全外部连接,并且希望得到我的所有结果集,而不仅仅是匹配项。
rur96b6h4#
就在今天,我不得不使用完全外部联接。在比较两个表的情况下,它很方便。例如,我比较的两个表来自不同的系统,所以我想获得以下信息:
1.表A中有表B中没有的行
1.表B中有表A中没有的行
1.表A或表B中重复
1.对于匹配行,值是否不同(例如:表A和表B都有Acct# 12345,LoanID abc123,但利率或贷款金额不同
此外,我在SELECT语句中创建了一个额外的字段,该字段使用CASE语句来“注解”标记此行的原因。利率不匹配/系统A中不存在该账户等
然后将其保存为视图。现在,我可以使用此视图创建报表并将其发送给用户以进行数据更正/输入,或者使用此视图通过使用CASE语句创建的“注解”字段提取特定人口(例如:具有不匹配利率的所有记录)并自动校正等。
如果你想看例子,告诉我。
esbemjvw5#
我很少使用它的时候是在连接两端测试NULL,以防我认为我正在测试的SQL中使用的初始INNER JOIN缺少数据。
sdnqo3pr6#
它们对于查找孤立数据很方便,但我很少在生产代码中使用它们。我不会**“总是不鼓励使用一个”**,但我认为在真实的世界中,与内部和左/右外部相比,它们通常不是最佳解决方案。
pxq42qpu7#
在我很少使用
Full Outer Join
的时候,它是用于数据分析和比较的目的,例如比较来自不同数据库的两个客户表,以找出每个表中的重复项,或者比较两个表的结构,或者找出一个表与另一个表相比的空值,或者找出一个表与另一个表相比的缺失信息。7xzttuei8#
例如,假设您有两个表:一个包含客户数据,另一个包含订单数据。完全外部联接允许您查看所有客户和所有订单,即使某些客户没有订单或某些订单没有对应的客户也是如此。这可以帮助您确定数据中的任何差距,并确保所有相关信息都包含在结果集中。
需要注意的是,完全外部联接可能会产生巨大的结果集,因为它包含两个表中的所有行。这可能会降低性能,因此最好仅在需要包含两个表中的所有行时才使用完全外部联接。
这将返回table1和table2中的所有行,并为两侧缺少的匹配项填充NULL值。