Oracle/SQL - podzapytanie i null

0

Witam, mam takie zapytanie:


select distinct z.zadid, z.system, z.nazwa , s.statid
from zad z
left outer join stat s on z.zadid=s.zadid
where z.zadid='260'
and s.statid= (SELECT MAX(statid)from zad z left join stat s on s.zadid=z.zadid where s.zadid='260') ;
order by s.statid desc;

Moje podzapytanie dla zadid=260 zwraca null
pobierz, plaintext
(SELECT MAX(statid)from zad z left join stat s on s.zadid=z.zadid where s.zadid='260')

i tak ma być => jest ok

Jeżeli zadid=123 , to statid nie jest NULL , więc
zapytanie główne zwraca mi przykładowe dane dla tego zadid, w takiej formie:

Zadid / system / nazwa / statid => nazwa kolumn

1 / xxx / yyy / 123 => wynik podzapytania

natomiast gdy wywołuje to zapytanie dla statid, które jest NULLem,
główne zapytanie nie zwraca mi nic ,

a powinno:

Zadid / system / nazwa / statid => nazwa kolumn

1 / xxx / yyy / null => wynik podzapytania

Czy ktoś może poradzić, jak zmodyfikować zapytanie ? dziękuje z góry.

0

... and s.statid IN (SELECT Max(...

1

Tu jest problem. Podzapytanie zwraca null, więc w warunku porównujesz wartość z nullem, co z założenia daje false. Nawet jeżeli null stoi po obydwu stronach porównania, to ono zawsze daje wynik negatywny.

and s.statid= (SELECT MAX(statid)from zad z left join stat s on s.zadid=z.zadid where s.zadid='260') ;

Generalnie, to to podzapytanie jest trochę bez sensu, jeżeli będziemy je rozpatrywać w kontekscie zapytania głównego, bo powinno wystarczyć to:

(SELECT MAX(statid)from stat s where s.zadid='260')

Powinno zadziałać tak:

and (s.statid= (SELECT MAX(statid)from stat s where s.zadid='260') or s.statid is null)

P.S. Po co ten średnik po podzapytaniu, jak tam jeszcze jest order by potem?

0

bardzo serdecznie dziekuje za pomoc, smiga :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1