Select z databazi s relaci 1:N
Honza Pazdziora
adelton na informatics.muni.cz
Pátek Prosinec 7 15:27:53 CET 2001
On Fri, Dec 07, 2001 at 03:19:20PM +0100, Zdeněk Böhm wrote:
>
> Databaze1 ma sloupec Id typu int, Databaze 2 ma sloupec Databaze1_Id typ int
> a sloupec XXX typ int. Ke kazdemu Id v Databazi1 muze existovat 1-5 zaznamu
> v Databazi2 (lise se obsahem sloupce XXX).
> Potrebuju poradit, jak napsat SELECT, ktery vybere zaznamy z Databaze1, ke
> kterym neexistuje v Databazi2 zaznam s nejakym konkretnim cislem (treba 3) v
> sloupci XXX.
>
> Priklad:
>
> Databaze1: Databaze2:
>
> Id Databaze1_Id XXX
> -------------------------------------------------------------------
> 1 1 1
> 1 2
> 1 3
> 2 1 1
> 1 2
>
> SELECT 1.Id, 2.XXX FROM Databaze1 AS 1, Databaze2 AS 2 WHERE 1.Id = 2.Id AND
> XXX = 3 vrati:
>
> Id XXX
> -------------
> 1 3
>
> SELECT 1.Id,2.XXX FROM Databaze1 AS 1, Databaze2 AS 2 WHERE 1.Id = 2.Id AND
> XXX <> 3 vrati:
>
> Id XXX
> -------------
> 1 1
> 1 2
> 2 1
> 2 2
>
> Jak napsat dotaz, ktery vrati (v pripade XXX=3)
>
> Id XXX
> -------------
> 2 1
> 2 2
>
> Jde to?
Jiste, napriklad
select database1.id, databaze2.xxx
from database1, databaze2
where database1.id = databaze2.databaze_id
and not exists (
select 1 from databaze2 databaze22
where database1.id = databaze22.databaze_id
and databaze22.xxx = 3
)
Netestovano. Pokud mate server, ktery by neumel not exists, da se
pouzit i not in, pripadne outer join.
--
------------------------------------------------------------------------
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 Databases