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

最佳答案

您在不适当地混合了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,

不是(简单但具有 bool(boolean) 搜索谓词)
  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是否等于 bool(boolean) 表达式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

关于sql - Mysql SELECT CASE何时返回然后返回字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4356318/

10-12 07:24