Kategorien:

Funktionen für bedingte Ausdrücke

IS [ NOT ] DISTINCT FROM

Vergleicht, ob zwei Ausdrücke gleich (oder ungleich) sind. Die Funktion ist NULL-sicher, d. h. sie behandelt NULL-Werte beim Vergleichen der Gleichheit als bekannte Werte. Beachten Sie, dass sich dies vom Vergleichsoperator EQUAL (=) unterscheidet, der NULLs als unbekannte Werte behandelt.

Siehe auch:

EQUAL_NULL

Syntax

<expr1> IS [ NOT ] DISTINCT FROM <expr2>

Nutzungshinweise

  • Der zurückgegebene Wert hängt davon ab, ob eine der Eingaben NULL-Werte aufweist:

    Gibt TRUE zurück
    <null> IS NOT DISTINCT FROM <null>
    <null> IS DISTINCT FROM <nicht_null>
    <nicht_null> IS DISTINCT FROM <null>
    Gibt FALSE zurück
    <null> IS DISTINCT FROM <null>
    <null> IS NOT DISTINCT FROM <nicht_null>
    <nicht_null> IS NOT DISTINCT FROM <null>

    Andernfalls gilt:

    <Ausdruck1> IS DISTINCT FROM <Ausdruck2> entspricht <Ausdruck1> != <Ausdruck2>
    <Ausdruck1> IS NOT DISTINCT FROM <Ausdruck2> entspricht <Ausdruck1> = <Ausdruck2>

Weitere Einzelheiten finden Sie in den folgenden Beispielen.

Beispiele

Erstellen Sie eine Tabelle mit einfachen Daten:

CREATE OR REPLACE TABLE x (i number);
INSERT INTO x values
    (1), 
    (2), 
    (null);

Zeigen Sie das kartesische Produkt an, das durch Verknüpfen der Tabelle mit sich selbst ohne Filter generiert wird:

SELECT x1.i x1_i, x2.i x2_i 
    FROM x x1, x x2
    ORDER BY x1.i, x2.i;
+------+------+
| X1_I | X2_I |
|------+------|
|    1 |    1 |
|    1 |    2 |
|    1 | NULL |
|    2 |    1 |
|    2 |    2 |
|    2 | NULL |
| NULL |    1 |
| NULL |    2 |
| NULL | NULL |
+------+------+

Zurückgeben von Zeilen, die Folgendes enthalten:

  • Nur gleiche Werte bei beiden Spalten.

  • Nur gleiche Werte oder NULL-Werte bei beiden Spalten.

SELECT x1.i x1_i, x2.i x2_i 
    FROM x x1, x x2 
    WHERE x1.i=x2.i;
+------+------+
| X1_I | X2_I |
|------+------|
|    1 |    1 |
|    2 |    2 |
+------+------+
SELECT x1.i x1_i, x2.i x2_i 
    FROM x x1, x x2 
    WHERE x1.i IS NOT DISTINCT FROM x2.i
    ORDER BY x1.i;
+------+------+
| X1_I | X2_I |
|------+------|
|    1 |    1 |
|    2 |    2 |
| NULL | NULL |
+------+------+

Illustrieren aller möglichen Ergebnisse für:

  • EQUAL = und NOT EQUAL <>

  • IS NOT DISTINCT FROM und IS DISTINCT FROM

SELECT x1.i x1_i, 
       x2.i x2_i,
       x1.i=x2.i, 
       iff(x1.i=x2.i, 'Selected', 'Not') "SELECT IF X1.I=X2.I",
       x1.i<>x2.i, 
       iff(not(x1.i=x2.i), 'Selected', 'Not') "SELECT IF X1.I<>X2.I"
    FROM x x1, x x2;
+------+------+-----------+---------------------+------------+----------------------+
| X1_I | X2_I | X1.I=X2.I | SELECT IF X1.I=X2.I | X1.I<>X2.I | SELECT IF X1.I<>X2.I |
|------+------+-----------+---------------------+------------+----------------------|
|    1 |    1 | True      | Selected            | False      | Not                  |
|    1 |    2 | False     | Not                 | True       | Selected             |
|    1 | NULL | NULL      | Not                 | NULL       | Not                  |
|    2 |    1 | False     | Not                 | True       | Selected             |
|    2 |    2 | True      | Selected            | False      | Not                  |
|    2 | NULL | NULL      | Not                 | NULL       | Not                  |
| NULL |    1 | NULL      | Not                 | NULL       | Not                  |
| NULL |    2 | NULL      | Not                 | NULL       | Not                  |
| NULL | NULL | NULL      | Not                 | NULL       | Not                  |
+------+------+-----------+---------------------+------------+----------------------+
SELECT x1.i x1_i, x2.i x2_i,
               x1.i IS NOT DISTINCT FROM x2.i, iff(x1.i IS NOT DISTINCT FROM x2.i, 'Selected', 'Not') "SELECT IF X1.I IS NOT DISTINCT FROM X2.I",
               x1.i IS DISTINCT FROM x2.i, iff(x1.i IS DISTINCT FROM x2.i, 'Selected', 'Not') "SELECT IF X1.I IS DISTINCT FROM X2.I"
        FROM x x1, x x2
        ORDER BY x1.i, x2.i;
+------+------+--------------------------------+------------------------------------------+----------------------------+--------------------------------------+
| X1_I | X2_I | X1.I IS NOT DISTINCT FROM X2.I | SELECT IF X1.I IS NOT DISTINCT FROM X2.I | X1.I IS DISTINCT FROM X2.I | SELECT IF X1.I IS DISTINCT FROM X2.I |
|------+------+--------------------------------+------------------------------------------+----------------------------+--------------------------------------|
|    1 |    1 | True                           | Selected                                 | False                      | Not                                  |
|    1 |    2 | False                          | Not                                      | True                       | Selected                             |
|    1 | NULL | False                          | Not                                      | True                       | Selected                             |
|    2 |    1 | False                          | Not                                      | True                       | Selected                             |
|    2 |    2 | True                           | Selected                                 | False                      | Not                                  |
|    2 | NULL | False                          | Not                                      | True                       | Selected                             |
| NULL |    1 | False                          | Not                                      | True                       | Selected                             |
| NULL |    2 | False                          | Not                                      | True                       | Selected                             |
| NULL | NULL | True                           | Selected                                 | False                      | Not                                  |
+------+------+--------------------------------+------------------------------------------+----------------------------+--------------------------------------+