次の方法で共有

Facebook x.com LinkedIn 電子メール

NULL 値と結合

結合されるテーブルの列に NULL 値がある場合、双方の NULL 値が互いに一致することはありません。結合されるいずれかのテーブルの列に複数の NULL 値がある場合にそれを返すのは、外部結合を使用した場合だけです。ただし WHERE 句によって NULL 値が除外される場合を除きます。

次に 2 つのテーブルを示しています。どちらのテーブルでも、結合に使われる列に NULL 値が含まれています。

table1 table2
a b c d
------- ------ ------- ------
 1 one NULL two
 NULL three 4 four
 4 join4

列 a の値と列 c の値を比較する結合の場合、NULL 値を含む列は一致しません。

SELECT *
FROM table1 t1 JOIN table2 t2
 ON t1.a = t2.c
ORDER BY t1.a

列 a と列 c で返されるのは、値が 4 の行 1 つだけです。

a b c d 
----------- ------ ----------- ------ 
4 join4 4 four 
(1 row(s) affected)

ベース テーブルから返される NULL 値と外部結合から返される NULL 値を区別することは困難です。たとえば、次の SELECT ステートメントは、2 つのテーブルの左外部結合を行います。

SELECT *
FROM table1 t1 LEFT OUTER JOIN table2 t2
 ON t1.a = t2.c
ORDER BY t1.a

以下に結果セットを示します。

a b c d 
----------- ------ ----------- ------ 
NULL three NULL NULL 
1 one NULL NULL 
4 join4 4 four 
(3 row(s) affected)

この結果では、データ内の NULL を、結合の失敗を表す NULL と区別するのが簡単ではありません。結合されるデータ内に NULL 値がある場合、通常は、普通の結合を使ってこれらの NULL 値を結果から除外することをお勧めします。


  • Last updated on 2012年10月31日