Predmet:Re: MySQL upiti nad jednom tablom
Citat:
sada mi lista samo jabuka pod voce, ali prikaze sve redove koje zelim, al neznam zasto ne napise ime druge i trece vocke ?
Pa sam si napisao
SELECT t1.datum, t1.kg, t1.voce …
...
WHERE TRIM(t1.voce) = 'jabuka'
Iz leve tabele (t1) biraÅ¡ polja, iz desne (t2) postavljaÅ¡ ograničenja
Citat:
U glavu mi sine pomisao o TRIM i NULL. Smijem li ovo upotrijebiti u SQL jeziku?
Kao prvo ne razumem čemu TRIM ?
Podatke o voću trebao bi da vučeÅ¡ iz kodne tabele gde čuvaÅ¡ podatke o Å¡ifri, nazivu, bar kodu, ceni… i ostalom Å¡to ti treba. U tabelu Prodaja prebacujeÅ¡ samo ključ polje iz tabele voće. Na taj način se sprečavaju greÅ¡ke, npr jednom ukucaÅ¡ mandarina, a drugi put mandrina.
Da li je kod tebe nula (0) ili NULL?
Nula i NULL nisu isto.
Null je prazan podatak (prazno polje). Null podatak se smatra da vrednost nije poznata, pa je besmisleno uporedjivati je sa bilo čime,
PA ČAK I SA SAMOM SOBOM. Ako uradis JOIN nad dve tabele po nekom polju koje sadrži i null vrednosti baza
NE RADI join za te vrednosti. I kod mene u SQL-u je bila greska umesto <> null, trebalo je IS NOT NULL.
NULL vrednosti treba izbegavati kad god je to moguce. U tvom primeru postavis default vrednost na 0. Mada ne razumem ako nije bilo prodaje nekog voca tog dana otkud u tabeli?
Elem da ne dužim više, nego da dam rešenje
Ako imaš null vrednosti (prazna polja)
PreuzmiIzvorni kôd (SQL):SELECT t1.datum, t1.kg, t1.voce
FROM ProdajaVoca AS t1 LEFT JOIN ProdajaVoca AS t2 ON t1.kg = t2.kg AND t1.datum = t2.datum
WHERE t2.voce='jabuka' OR t1.voce='jabuka'
ORDER BY t1.datum;
Ako imaš nule
PreuzmiIzvorni kôd (SQL):SELECT t1.datum, t1.kg, t1.voce
FROM ProdajaVoca AS t1 INNER JOIN ProdajaVoca AS t2 ON t1.kg = t2.kg AND t1.datum = t2.datum
WHERE t2.voce='jabuka' AND (t2.kg <> 0 OR t1.voce='jabuka')
ORDER BY t1.datum;