1

我正在尝试基于三个条件实现完全外连接,所有这些条件都由逻辑 AND 链接。但是,第三个条件并不总是有效的:它基于一个名为“counter”的列,在某些情况下,它在我想要加入的表中可能是“null”。让我更详细地解释一下。基本的 join on 语句如下所示:

... table1 full outer join table2 
on (table1.1=table2.1 AND table1.2=table2.2 AND table1.counter=table2.counter)

但是,现在在某些情况下 table1.counter 可能为 null,而 table2.counter 不是。在这些情况下,我希望在前两个条件下进行连接,而忽略第三个条件。

我的想法是这样做:

... table1 full outer join table2 
on (table1.1=table2.1 AND table1.2=table2.2 
AND table1.counter= case when table1.counter is null then null 
                         else table2.counter 
                    end)

然而,这不起作用,因为结果与第一个代码中的结果完全相同,即第一个 case 语句永远不会被触发。但我不明白为什么?

非常欢迎任何提示或见解!

4

1 回答 1

2

你可以尝试类似的东西:

AND (table1.counter IS NULL OR table1.counter=table2.counter)

代替 :

AND table1.counter=table2.counter

在您的第一个查询中。

于 2013-11-03T10:57:23.280 回答