3 つの条件に基づいて完全な外部結合を実現しようとしています。それらはすべて論理 AND でリンクされています。ただし、3 番目の条件は常に有効であるとは限りません。これは、結合先のテーブルで場合によっては「null」になる可能性がある「counter」という名前の列に基づいています。詳しく説明しましょう。基本的な 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 は null でない場合があります。このような場合、最初の 2 つの条件で結合を行い、3 番目の条件を無視するようにします。
私の考えは、次のようにすることでした:
... 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 ステートメントはトリガーされません。しかし、私はなぜわかりませんか?
ヒントや洞察は大歓迎です!