2010-12-04 11 views
26

tengo dos campos nnmu y NNMi,Mysql SELECT CASE cuando algo luego regresar campo

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 

y revertir,

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. 

Al principio todo se ve bien, pero de alguna manera se mezclo valores , funciona cuando nnmi y nnmu ambos son iguales a 0, pero cuando cualquiera de los valores es 1, devuelve un sinsentido. ¿Alguna ayuda?

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 

Respuesta

65

Usted está mezclando los 2 differentCASE sintaxis inapropiada.

Usar este estilo (búsqueda)

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

O este estilo (simple)

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

No Este (Simple pero con booleanos predicados de búsqueda)

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, 

En MySQL esto terminará probando si u.nnmu es igual al valor de la expresión booleana u.nnmu ='0'. Independientemente de si u.nnmu es 1 o 0 el resultado de la expresión caso en sí será 1

Por ejemplo, si nmu = '0' entonces (nnmu ='0') evalúa como true (1) y (nnmu ='1') evalúa como false (0). Sustituyendo estos en la expresión caso da

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

si nmu = '1' entonces (nnmu ='0') evalúa como false (0) y (nnmu ='1') evalúa como true (1). Sustituyendo estos en la expresión de caso da

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