1

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 ステートメントはトリガーされません。しかし、私はなぜわかりませんか?

ヒントや洞察は大歓迎です!

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 に答える