• 5 odgovora
  • 2.178 pregleda
ERROR 1054 (42S22): Unknown column 02.04.2011. u 14:37 · pre 189 meseci #1
Imam sledeci problem. Upit
Code:
SELECT news_id AS nid FROM news WHERE nid > 1;
vraca gresku
Code:
ERROR 1054 (42S22): Unknown column 'nid' in 'where clause'
Ono sto me cudi je da se upit
Code:
SELECT news_id FROM news WHERE news_id > 1
izvrsi kako treba. Pa me interesuje zasto baca ovu gresku? MySQL server je 5.1.36.

Pretpostavljam da je resenje krajnje trivijalno!
Re: ERROR 1054 (42S22): Unknown column 02.04.2011. u 14:50 · pre 189 meseci #2
To što si stavio "as nid" ne znaci da mozes da koristis nid u where uslovu. To nid ti sluzi samo u rezultatu upita da se naziv kolone ne zove news_id nego nid.
A ako hoćeš da ti radi upit stavi news_id u where uslovu..
Potpis
http://biske.rs
Re: ERROR 1054 (42S22): Unknown column 02.04.2011. u 14:55 · pre 189 meseci #3
To je zbog toga što u trenutku kad se računa WHERE uslov, vrednost tog alijasa nije poznata. Na primer
Code (mysql):
SELECT id, COUNT(*) AS cnt FROM tbl_name
WHERE cnt > 0 GROUP BY id;

Ovde u trenutku računanja da li je cnt>0, vrednost cnt nije poznata.

Više o ovome pogledaj na stranici:
http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html
Potpis
http://biske.rs
Re: ERROR 1054 (42S22): Unknown column 02.04.2011. u 15:17 · pre 189 meseci #4
To sam video i bilo mi je logicno da zbog GROUP BY, COUNT(*) AS cnt nije izracunat. S druge strane milsio sam da se to neodnosi na moj primer jer sam samo napravio alias na kolonu koja vec postoji - news_id AS nid.

To znaci da bi upit bio validan moram da uradim ovako nesto (2 puta ponovim isto racunjanje)
Code:
SELECT user_id, TIMESTAMPDIFF(YEAR, user_dob, NOW()) AS age
FROM users
WHERE TIMESTAMPDIFF(YEAR, user_dob, NOW()) > 18
Re: ERROR 1054 (42S22): Unknown column 02.04.2011. u 16:12 · pre 189 meseci #5
Za takve jednostavne, neagregatne upite nikad nisam koristio HAVING klauzulu, ali ovo bi trebalo da prođe:
Code:
SELECT user_id, TIMESTAMPDIFF(YEAR, user_dob, NOW()) AS `age`
FROM users
HAVING `age` > 18
Re: ERROR 1054 (42S22): Unknown column 02.04.2011. u 16:42 · pre 189 meseci #6
357 - da, stim da ce upit da radi hiljadama puta brze ako umesto

WHERE ... TIMESTAMPDIFF(YEAR, user_dob, NOW()) > 18 ...

stavis

WHERE ... user_dob < now() - interval 1 year ...

u prvom slucaju imao/nemao index nad user_dob radis full table scan dok u drugom slucaju ako imas index nad user_dob radis range scan nad indexom sto je mnoooogo brze



nikola - having je zeznut zato se uslov proverava nad vec dobijenim rezultatom tako da je spor
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme