Cóż, nie jestem pewien, czy tak jest lepiej , ale nieco bardziej zwięzłe może być użycie LNNVL
, funkcja (której można używać tylko w WHERE
klauzula), która zwraca TRUE
jeśli dane wyrażenie to FALSE
lub NIEZNANE (NULL
). Na przykład...
WITH T AS
(
SELECT 1 AS X, 1 AS Y FROM DUAL UNION ALL
SELECT 1 AS X, 2 AS Y FROM DUAL UNION ALL
SELECT 1 AS X, NULL AS Y FROM DUAL UNION ALL
SELECT NULL AS X, 1 AS Y FROM DUAL
)
SELECT
*
FROM
T
WHERE
LNNVL(X <> Y);
...zwróci wszystko oprócz wiersza, w którym X =1 i Y =2.