Select v MySql
Honza Pazdziora
adelton na informatics.muni.cz
Středa Listopad 21 10:50:29 CET 2001
On Wed, Nov 21, 2001 at 10:21:51AM +0100, Radek Kanovsky wrote:
>
> S GROUP BY to nejde a ten prvni priklad nefunguje kvuli vic
> polozkam v subselectu. Zkuste to nejak takto:
>
> SELECT c_prod.id_prod, c_prod.nazov, c_ver.verzia, c_ver.datum
> FROM c_prod, c_ver
> WHERE c_prod.id_prod = c_ver.id_prod
> AND c_ver.verzia IN (SELECT MAX(verzia) FROM c_ver GROUP BY id_prod);
Pro vstup
id_prod verzia
1 1.12
1 2.00
2 2.00
2 2.50
tak najdete zaznamy
1 2.00
2 2.00
2 2.50
cili tam budete mit ten
2 2.00
navic. Ten subselect je potreba svazat pres konkretni cislo produktu.
Cili neco jako
and (c_ver.id_prod, c_ver.verzia) in (
select id_prod, max(verzia)
from c_ver
group by id_prod
)
Zadana uloha se da take resit pres outer join s tou samou tabulkou,
kde se pozaduje, aby v ta outerjoinovane byla dana hodnota (zde verze)
vetsi, a zaroven null. Tim dostanu prave pouze ty zaznamy, kde nic
vetsiho neexistuje, a tudiz jsou max. Podobne not exists, pokud tuto
syntaxi server podporuje.
Je vhodne overit na konkretnim priklade, jestli je rychlejsi udelat
in nebo not exists.
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
.project: Perl, DBI, Oracle, MySQL, auth. WWW servers, DBD::XBase.
------------------------------------------------------------------------
Další informace o konferenci Test