2010-12-04 13 views
26

私は2つのフィールドnnmuとNNMIのMySQLのSELECT CASE

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か否かがnmu = '0'場合case式自体の結果は、次いで、例えば1

なり1又は0であるのは、(nnmu ='0')(1)trueとして評価し、(nnmu ='1'false(0)として評価します。 nmu = '1'場合ケース式にこれらを代入すると、次に

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

を与える(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