Portál AbcLinuxu, 8. května 2025 23:24
Kino: id nazev adresa 1 smichov praha 5 2 galaxie praha 4 Filmy (pro zjednoduseni jen nazev): id nazev 1 blade 2 blade 2 3 saturnin 4 transformers 5 akta X Predstaveni (kde se co hraje, kino_id je id z tab. kino, film_id je id z tab. Filmy): id kino_id film_id 1 1 1 2 1 2 3 1 5 4 2 2 5 2 3 6 2 4 7 2 5
Řešení dotazu:
(kino_id,film_id)v tabulce
predstaveniunikátní, tak by mohlo fungovat
select k.id from kino k,filmy f, predstaveni p where k.id=p.kid and f.id=p.fid and f.id in(3,4,5) group by k.id having count(*)=( select count(*) from filmy where f.id in(3,4,5) )
Pokud unikátní není, šlo by např.
select distinct K.ID from KINA K inner join PREDSTAVENI P3 on P3.KINO_ID=K.ID and P3.FILM_ID=3 inner join PREDSTAVENI P4 on P4.KINO_ID=K.ID and P3.FILM_ID=4 inner join PREDSTAVENI P5 on P5.KINO_ID=K.ID and P3.FILM_ID=5
nebo
select distinct P3.KINO_ID from PREDSTAVENI P3 where P3.FILM_ID=3 inner join PREDSTAVENI P4 on P4.KINO_ID=P3.KINO_ID and P3.FILM_ID=4 inner join PREDSTAVENI P5 on P5.KINO_ID=P3.KINO_ID and P5.FILM_ID=5
případně přes subselecty
select K.ID from KINA K where exists (select P3.ID from PREDSTAVENI P3 where P3.KINO_ID=K.ID and P3.FILM_ID=3) and exists (select P4.ID from PREDSTAVENI P4 where P4.KINO_ID=K.ID and P4.FILM_ID=4) and exists (select P5.ID from PREDSTAVENI P5 where P5.KINO_ID=K.ID and P5.FILM_ID=5)
select k.id from kino k,filmy f,( select distinct kid,fid from predstaveni ) p where k.id=p.kid and f.id=p.fid and f.id in(3,4,5) group by k.id having count(*)=( select count(*) from filmy where f.id in(3,4,5) )
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.