DISTINCT 述部
DISTINCT 述部は、値を別の値と比較するか、値のセットを別の値のセットと比較します。
expression および row-value-expression は、配列式にすることはできません。
DISTINCT 演算子の後に指定した row-value-expression から戻されるエレメントの数は、DISTINCT 演算子の前に指定した row-value-expression から戻されるエレメントの数と一致している必要があります。 row-value-expressions の対応する列または式のデータ・タイプは、互換であることが必要です。 述部が評価されるときは、左側にあるそれぞれの式の値が、右側にある対応する式の値と比較されます。 述部の結果は、述部の形式によって異なります。
述語が IS DISTINCT、対応する値表現のペアの比較の少なくとも1つが false と評価された場合、述語の結果は true となります。 これ以外の場合、述部の結果は偽です。 結果が「不明」になることはありません。
述語が評価されると、 IS NOT DISTINCT FROM、対応する値式のすべてのペアが真と評価された場合、述語の結果は真となります(null値はnull値と等しいとみなされます)。 それ以外の場合、述部は偽です。 結果が「不明」になることはありません。
DISTINCT 述部は、次のコンテキストでは使用できません。
- その ON フル・アウター・ジョインの結合条件
- チェック制約
- 比較述部
以下の DISTINCT 述部は、対応する検索条件と論理的に等価です。
| DISTINCT 述部 | 検索条件 |
|---|---|
|
|
|
|
例 1: T1 は、3 つの行がある単一列の表であるとします。 列 C1 の値は、1、2、および NULL です。 次のような照会を行ったとします。
SELECT * FROM T1
WHERE C1 IS DISTINCT FROM :HV; 次の表に、C1 とホスト変数のさまざまな値に対する述部の値を示します。| C1 の値 | HV の値 | 述部の結果 |
|---|---|---|
| 1 | 2 | はい |
| 2 | 2 | いいえ |
| ヌル | 2 | はい |
| 1 | ヌル | はい |
| 2 | ヌル | はい |
| ヌル | ヌル | いいえ |
例 2: 最初の例と同じ表を想定しますが、この例では照会の述部の否定形式を考えてみましょう。
SELECT * FROM T1
WHERE C1 IS NOT DISTINCT FROM :HV; 次の表に、C1 とホスト変数のさまざまな値に対する述部の値を示します。| C1 の値 | HV の値 | 述部の結果 |
|---|---|---|
| 1 | 2 | いいえ |
| 2 | 2 | はい |
| ヌル | 2 | いいえ |
| 1 | ヌル | いいえ |
| 2 | ヌル | いいえ |
| ヌル | ヌル | はい |
