Oracle/SQL - podzapytanie i null

Oracle/SQL - podzapytanie i null
  • Rejestracja: dni
  • Ostatnio: dni
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.

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
0

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

scovron
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 27
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.

Kopiuj
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:

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

Powinno zadziałać tak:

Kopiuj
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?

  • Rejestracja: dni
  • Ostatnio: dni
0

bardzo serdecznie dziekuje za pomoc, smiga :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.