2010-12-04 4 views
26

मैं दो क्षेत्र nnmu और nnmi,Mysql चयन मामला है जब कुछ तो लौट क्षेत्र

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 

और रिवर्स,

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. 

पहले सब कुछ पर अच्छा लग रहा है नहीं है, लेकिन किसी भी तरह यह मान मिश्रण , यह काम करता है जब nnmi और nnmu दोनों 0 के बराबर होते हैं, लेकिन जब कोई मान 1 होता है तो यह बकवास देता है। कोई मदद?

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 

उत्तर

65

आप 2 differentCASE वाक्यविन्यास अनुपयुक्त मिश्रण कर रहे हैं। इस शैली (खोजे गए)

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

या इस शैली (सरल)

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

नहीं यह (सरल लेकिन बूलियन खोज विधेय के साथ)

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, 

उपयोग

MySQL में यह परीक्षण समाप्त हो जाएगा कि u.nnmu बूलियन अभिव्यक्ति u.nnmu ='0' के मूल्य के बराबर है। चाहे u.nnmu है 1 या 0 मामले अभिव्यक्ति का परिणाम की परवाह किए बिना ही उदाहरण के लिए किया जाएगा 1

अगर nmu = '0' तो (nnmu ='0') का मूल्यांकन करता है के रूप में true (1) और (nnmu ='1') false के रूप में मूल्यांकन करता है (0)। मामले अभिव्यक्ति में इन स्थानापन्न देता

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

अगर nmu = '1' तो (nnmu ='0') के रूप में मूल्यांकन करता false (0) और (nnmu ='1') true के रूप में मूल्यांकन करता है (1)। इन्हें केस एक्सप्रेशन में सबस्टिट्यूट करने से

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