连接条件中的SQL case语句

时间:2013-11-03 10:47:38

标签: sql

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

... 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语句永远不会被触发。但我不明白为什么?

任何提示或见解都会受到欢迎!

1 个答案:

答案 0 :(得分:2)

您可以尝试以下方式:

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

而不是:

AND table1.counter=table2.counter

在您的第一个查询中。