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