No, nejsem si jistý, jestli je to lepší , ale může být o něco stručnější použít LNNVL
, funkce (kterou můžete použít pouze v WHERE
klauzule), která vrací TRUE
pokud je daný výraz FALSE
nebo NEZNÁMÝ (NULL
). Například...
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);
...vrátí všechny kromě řádku, kde X =1 a Y =2.