2つのフィールド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種類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.nnmu
が1
であるか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
if nmu = '1'
then(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