Подтвердить что ты не робот

Mysql SELECT CASE КОГДА что-то возвращается в поле

У меня есть два поля nnmu и nnmi,

if nnmu is equal to 1, I need to return naziv_mesta from **mesto_istovara**,
else if it =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 =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
4b9b3361

Ответ 1

Вы смешиваете 2 разных 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,

Не это (простой, но с булевыми предикатами поиска)

  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, результат самого выражения case будет 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