LNNVL jest wbudowaną funkcją wyroczni, która zwraca PRAWDA dla warunków ewaluujących do FAŁSZ lub NIEZNANY, i zwraca FAŁSZ dla warunków ewaluujących do PRAWDA. Moje pytanie brzmi: jaka byłaby korzyść ze zwrócenia przeciwieństwa warunku prawdy, a nie tylko obsługi wartości NULL?
Załóżmy na przykład, że masz tabelę Emp z kolumnami StartCommission i CurrentCommission, która może zawierać wartości null. Poniższe zwraca tylko wiersze bez wartości null:
SELECT * FROM Emp WHERE StartCommission = CurrentCommission;
Jeśli chcesz dołączyć wiersze, w których prowizja jest zerowa, możesz zrobić coś takiego:
SELECT * FROM Emp WHERE StartCommission = CurrentCommission
OR StartCommission IS NULL OR CurrentCommission IS NULL;
Wydaje się, że istnieje funkcja skracająca tę składnię, ale użycie LNNVL zwraca wszystkie nierównomierne rekordy i wszystkie rekordy z zerami.
SELECT * FROM Emp WHERE LNNVL(StartCommission = CurrentCommission);
Dodanie NOT do tego zwraca tylko wiersze bez wartości null. Wydaje mi się, że pożądaną funkcjonalnością w tym przypadku byłoby utrzymanie prawdziwych warunków prawdziwych, fałszywych warunków fałszywych, a nieznane warunki ocenione jako prawdziwe. Czy naprawdę stworzyłem tutaj przypadek niskiego użycia? Czy naprawdę bardziej prawdopodobne jest, że zechce przekształcić nieznane w prawdziwe, prawdziwe w fałszywe, a fałszywe w prawdziwe?
create table emp (StartCommission Number(3,2), CurrentCommission Number(3,2));
insert into emp values (null,null);
insert into emp values (null,.1);
insert into emp values (.2,null);
insert into emp values (.3,.4);