我正在尝试基于三个条件实现完全外连接,所有这些条件都通过逻辑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语句永远不会被触发。但我不明白为什么?
任何提示或见解都会受到欢迎!
答案 0 :(得分:2)
您可以尝试以下方式:
AND (table1.counter IS NULL OR table1.counter=table2.counter)
而不是:
AND table1.counter=table2.counter
在您的第一个查询中。