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
anem 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, haaIS NULLifnull
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?