Portál AbcLinuxu, 8. května 2025 23:24

Dotaz: SQL dotaz - vyber vice hodnot z tabulek

10.9.2011 18:05 xts | skóre: 10
SQL dotaz - vyber vice hodnot z tabulek
Přečteno: 1291×
Odpovědět | Admin
zdravim, prosim o pomoc s sql dotazem, uz do toho cumim nekolik veceru a nemuzu si to v hlave spravne predstavit tak abych zformuloval funkcni dotaz. Nejlip popisu co potrebuju kdyz pouziju tenhle priklad http://zdrojak.root.cz/clanky/navrh-databaze-nosql-vs-sql/ ten obrazek hned nahore. tedy: zjednodusene mam 3 tabulky:
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

no a ted potrebuju vybrat kino ktery hraje filmy 3,4 a 5. Dotazy mi vratej bud 3 ruzny polozky, nebo nic. Potrebuju zformulovat dotaz ktery mi vrati jako vysledek kino c.2 protoze hraje filmy 3,4 i 5. diky za napady

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

10.9.2011 19:20 jekub
Rozbalit Rozbalit vše Re: SQL dotaz - vyber vice hodnot z tabulek
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud je
(kino_id,film_id)
v tabulce
predstaveni
uniká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)
)
Řešení 1× (xts (tazatel))
10.9.2011 20:03 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: SQL dotaz - vyber vice hodnot z tabulek

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)
10.9.2011 20:28 jekub
Rozbalit Rozbalit vše Re: SQL dotaz - vyber vice hodnot z tabulek
Pokud by to nebylo unikátní, asi bych použil
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)
)
13.9.2011 00:09 xts | skóre: 10
Rozbalit Rozbalit vše Re: SQL dotaz - vyber vice hodnot z tabulek
tohle mi pise chybu #1054 - Unknown column 'kid' in 'field list'.

Ale alespon jsem si precetl k cemu je distinct :-)

kazdopadne taky dekuju
13.9.2011 00:00 xts | skóre: 10
Rozbalit Rozbalit vše Re: SQL dotaz - vyber vice hodnot z tabulek
prvni mi nevrati nic, druhy pise chybu #1064 a pise o spatny sql syntaxi, ale treti je super a jede.

Muze to byt nejaka uplna kravinka proc to nejde, tak moc se v slozitejsich dotazech nevyznam, kazdopadne ta treti varianta mi funguje super i v ruznejch upravach takze nad zbylyma nebudu patrat - diky, netusil sem ze ty dotazy jdou takhle vnorit.
12.9.2011 23:55 xts | skóre: 10
Rozbalit Rozbalit vše Re: SQL dotaz - vyber vice hodnot z tabulek
ne, tam je unikatni id.
10.9.2011 22:24 kuka
Rozbalit Rozbalit vše Re: SQL dotaz - vyber vice hodnot z tabulek
Odpovědět | | Sbalit | Link | Blokovat | Admin
na toto se pouziva exists, v tvem pripade konjunkce tri exists podminek, pro kazdy film jedna

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.