首页 > 解决方案 > 在 ON 子句中使用 OR 在一个或其他列上的完整外部连接表

问题描述

我想对 2 个表进行完全外连接 - Table_A 和 Table_B 在 2 列 Unique_ID1 或 Unique_ID2 - 因为某些行可能在一个上匹配,而另一些在另一个上,我无法确定这一点。

我试过这个 -

Select *
from Table_A 
     full outer join Table_B on Table_A.Unique_ID1 = Table_A.Unique_ID1
                             OR  Table_A.Unique_ID2 = Table_A.Unique_ID2

虽然这没有给我任何错误,但查询会永远运行。重新构造它以获得所需输出的最佳方法是什么?

标签: sqlsql-server

解决方案


你的条件总是被评估为真,因为你有来自Table_A相等检查两侧的列,产生一个完整的笛卡尔积。用 替换等式的一侧Table_B,你应该没问题:

SELECT          *
FROM            Table_A 
FULL OUTER JOIN Table_B ON Table_A.Unique_ID1 = Table_B.Unique_ID1 OR
-- Here ----------------------------------------------^
                           Table_A.Unique_ID2 = Table_B.Unique_ID2
-- And here ------------------------------------------^

推荐阅读