【问题标题】:Mysql SELECT CASE WHEN something then return fieldMysql SELECT CASE WHEN 某事然后返回字段
【发布时间】:2011-05-20 08:53:50
【问题描述】:

我有两个字段 nnmu 和 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

反过来,

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

【问题讨论】:

    标签: sql select mysql case


    【解决方案1】:

    您不恰当地混合了 2 different CASE 语法。

    使用这种风格(搜索)

      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,
    

    Not This(简单但带有布尔搜索谓词)

      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.nnmu1 还是0,case 表达式本身的结果都是1

    例如,如果 nmu = '0' 则 (nnmu ='0') 的计算结果为 true (1) 并且 (nnmu ='1') 的计算结果为 false (0)。将这些代入 case 表达式给出

     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)。将这些代入 case 表达式给出

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

    【讨论】:

      猜你喜欢
      • 2011-06-07
      • 2014-01-29
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      相关资源
      最近更新 更多