2013-11-03 24 views
1

我试图根据三个条件实现一个完整的外部连接,所有这些条件都由逻辑与连接起来。但是,第三个条件并不总是有效的:它基于名为“counter”的列,在某些情况下,该列可能在我要加入的表中为“null”。 让我更详细地解释一下。 基本的加入对语句应该是这样的:在连接条件下的SQL case语句

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

然而现在,在某些情况下table1.counter可能为空,而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语句永远不会被触发。但我不明白为什么?

任何提示或见解将大受欢迎!

回答

2

你可以尝试这样的:

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

相反的:

AND table1.counter=table2.counter 

在第一个查询。

+0

谢谢,这似乎工作! – user2949599

+0

不客气,但不要忘记标记为已解决;) –