wake-up-neo.com

Mysql SELECT CASE WHEN etwas dann Feld zurück

Ich habe zwei Felder nnmu und nnmi,

if nnmu is equal to 1, I need to return naziv_mesta from **mesto_istovara**,
else if it's =0 I need to return naziv_mesta from mesto_utovara table

und umgekehrt,

if nnmi is equal to 1, then I need  to return naziv_mesta from **mesto_utovara,** 
else if it's =0 need to return naziv_mesta from mesto_istovara.

Zuerst sieht alles gut aus, aber irgendwie verwechselt es die Werte. Es funktioniert, wenn nnmi und nnmu beide gleich 0 sind, aber wenn einer der Werte 1 ist, wird Unsinn zurückgegeben. Irgendeine Hilfe?

select u.id_utovar,
             u.datum_isporuke,
             u.broj_otpremnice,
             r.naziv_robe,              
             CASE u.nnmu 
              WHEN u.nnmu ='0' THEN mu.naziv_mesta
              WHEN u.nnmu ='1' THEN m.naziv_mesta
             ELSE 'GRESKA'
             END as mesto_utovara,
             CASE u.nnmi
              WHEN u.nnmi = '0' THEN m.naziv_mesta 
              WHEN u.nnmi = '1' THEN mu.naziv_mesta
              ELSE 'GRESKA'
             END as mesto_istovara,                                                
             m.adresa,
             m.kontakt_osoba,
             m.br_telefona,
             u.broj_paleta,
             u.bruto,
             k.username,
             u.napomena,                  
             v.registracija,
             p.naziv_prevoznika,
             u.cena,
             u.korisnik_logistika,
             u.korisnik_analitika,
             u.datum_unosa,
             u.vreme_unosa,
             u.zakljucan,
             u.id_mesto_utovara,
             u.id_mesto_istovara,
             u.nnmu,
             u.nnmi             
      FROM utovar u ,mesto_utovara mu, mesto_istovara m, roba r, vozila v,prevoznik p, korisnik k
      WHERE u.id_mesto_istovara=m.id_mesto_istovara
       and k.id_korisnik = u.korisnik
       and r.id_robe=u.id_robe 
       and u.id_mesto_utovara = mu.id_mesto_utovara 
       and v.id_vozilo = u.id_vozilo 
       and p.id_prevoznik = u.id_prevoznik
       ORDER by u.id_utovar DESC
29
supermus

Sie mischen die Syntax 2 verschiedeneCASE falsch.

Diesen Stil verwenden (Gesucht)

  CASE  
  WHEN u.nnmu ='0' THEN mu.naziv_mesta
  WHEN u.nnmu ='1' THEN m.naziv_mesta
 ELSE 'GRESKA'
 END as mesto_utovara,

Oder dieser Stil (Einfach)

  CASE u.nnmu 
  WHEN '0' THEN mu.naziv_mesta
  WHEN '1' THEN m.naziv_mesta
 ELSE 'GRESKA'
 END as mesto_utovara,

Nicht dies (einfach, aber mit booleschen Suchprädikaten)

  CASE u.nnmu 
  WHEN u.nnmu ='0' THEN mu.naziv_mesta
  WHEN u.nnmu ='1' THEN m.naziv_mesta
 ELSE 'GRESKA'
 END as mesto_utovara,

In MySQL wird dann geprüft, ob u.nnmu Dem Wert des Booleschen Ausdrucks u.nnmu ='0' Selbst entspricht. Unabhängig davon, ob u.nnmu1 Oder 0 Ist, lautet das Ergebnis des case-Ausdrucks selbst 1.

Wenn beispielsweise nmu = '0' Gilt, wird (nnmu ='0') Als true (1) und (nnmu ='1') Als false (0) ausgewertet. Das Einsetzen dieser in den case-Ausdruck ergibt

 SELECT CASE  '0'
  WHEN 1 THEN '0'
  WHEN 0 THEN '1'
 ELSE 'GRESKA'
 END as mesto_utovara

wenn nmu = '1', wird (nnmu ='0') als false (0) und (nnmu ='1') als true (1) ausgewertet. Das Einsetzen dieser in den case-Ausdruck ergibt

 SELECT CASE  '1'
  WHEN 0 THEN '0'
  WHEN 1 THEN '1'
 ELSE 'GRESKA'
 END as mesto_utovara
70
Martin Smith