Hogy lehet SQLben feltételt szabni?
Sziasztok!
A következőkhöz kérnék egy kis segítséget...
ELSŐ PROBLÉMA
van egy oszlopom 1 darab karakter LEHET benne... pl... r, a, c.. ha nincs benne semmi, akkor NULL. amikor csinálok egy feltételt WHERE mezo != 'r' akkor csak az 'a' és 'c' mezőket hozza le. a NULLás termékeket nem. Ezért mindig WHERE mezo != 'r' OR mezo IS NULL feltételeket kell adnom. nincs ennél egyszerűbb megoldás?
MÁSODIK PROBLÉMA
szeretném lekérdezni azokat a termékeket, amelyeknél b=m, de hogyha az a=1, akkor db legyen nagyobb 0-nál. (tehát mivel a-nál 1 van és a db 0, ezért a második terméket ne listázza ki) hogy kell ezt megoldani sqlben?
egy nagyon béna megoldásként azt csináltam, hogy WHERE (b=m AND a != 1) OR (b=m AND a=1 AND db>0 ) de hátha van ennél egyszerűbb. ráadásul ha elolvassa valaki az első problémámat, akkor rájön h az a!=1 feltétel két részből áll.
Előre is köszönöm a segítséget!
■ A következőkhöz kérnék egy kis segítséget...
ELSŐ PROBLÉMA
van egy oszlopom 1 darab karakter LEHET benne... pl... r, a, c.. ha nincs benne semmi, akkor NULL. amikor csinálok egy feltételt WHERE mezo != 'r' akkor csak az 'a' és 'c' mezőket hozza le. a NULLás termékeket nem. Ezért mindig WHERE mezo != 'r' OR mezo IS NULL feltételeket kell adnom. nincs ennél egyszerűbb megoldás?
MÁSODIK PROBLÉMA
termekek tábla
-------------
nev db a b
termek1 5 0 m
termek2 0 1 m
termek3 3 0 m
-------------
nev db a b
termek1 5 0 m
termek2 0 1 m
termek3 3 0 m
szeretném lekérdezni azokat a termékeket, amelyeknél b=m, de hogyha az a=1, akkor db legyen nagyobb 0-nál. (tehát mivel a-nál 1 van és a db 0, ezért a második terméket ne listázza ki) hogy kell ezt megoldani sqlben?
egy nagyon béna megoldásként azt csináltam, hogy WHERE (b=m AND a != 1) OR (b=m AND a=1 AND db>0 ) de hátha van ennél egyszerűbb. ráadásul ha elolvassa valaki az első problémámat, akkor rájön h az a!=1 feltétel két részből áll.
Előre is köszönöm a segítséget!
WHERE
Nekem eléggé egyszerűnek tűnik a megoldás. Mondjuk sokkal szebb lenne, ha nem tárolnál NULL értéket, csak mondjuk üres stringet vagy egy space-t (' '), és akkor nem kellene az OR.
Nem jó
Listázzon ki minden terméket, ahol b='m', AKKOR IS HA NULLA DARAB VAN BELŐLE! DE HA a sorban a='1' van, akkor ellenőrizze, hogy db nagyobb-e nullánál és ha igen, hozza!
Tehát minden termék kell (b='m'), kivétel ez alól az a=1 termékek, mert náluk legalább 1 darabnak kell lenni.
Előre is köszönöm a segítséget!
Pont ezt csinálja
nem éppen
a = 1 AND
WHERE b = 'm' AND (a != 1 OR a = 1 AND db > 0)
A kijelölt rész fölösleges, hiszen, az OR utáni rész csak a = 1 esetén értékelődik ki.
MEGOLDÁS
MEGOLDÁS:
WHERE b = 'm' AND (a != 1 OR db > 0)
lol
szerk: most akartam megírni hogy közben végiggondoltam tiszta fejjel és rájöttem hogy "a" null értéke esetén igenis kell az a = 1 feltétel, mert null != 1 eredménye null lesz, ami hamisként értékelődik ki, de látom Poetro megelőzött.
viszont a kérdezőnek ez egy nagyon jó példa volt a null értékek használatának hátulütőiről.
NULL
a
nem lehetNULL
, ahogyan én is feltételeztem. Ha NULL is lehet, akkor további feltételt lehet tenni, bár nem volt kitétel, hogy mi történjen akkor, haa
IS NULL
ifnull
végülis akkor megvan a megoldás
b='m' AND (IFNULL(a, '') != '1' OR (a='1' AND db>0))
tud ennél valaki jobbat?