Null 值與聯結
當資料表的資料行中有 Null 值時,Null 值彼此並不相符。若所要聯結之資料表的資料行中出現 Null 值,它只能藉由使用外部聯結來傳回 (除非 WHERE 子句可排除 Null 值)。
以下列出兩個資料表,而每個資料表都有 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 的一個資料列會被傳回:
a b c d
----------- ------ ----------- ------
4 join4 4 four
(1 row(s) affected)
基底資料表傳回的 Null 值,也很難與外部聯結傳回的 Null 值作區分。例如,下列 SELECT 陳述式將對這兩個資料表進行左方外部聯結:
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 值出現在被聯結的資料中時,您最好透過使用一般聯結將它們從結果中刪除。