Diskuze: Výběrový dotaz s parametrem z jiné tabulky
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Obrázek relací a struktury tabulek
dotaz je pro tabulku uci_predmety
Předpokládám, že máš vybraného vyučujícího a k němu chceš
přiřadit předměty, tedy ID_vyucujici je známé.
Můžeš zkusit třeba něco takového
SELECT ID_predmetu, Nazev_predmetu FROM Predmety WHERE ID_katedra IN (SELECT Katedra FROM Vyucujici WHERE ID_vyucujici = id_vybraneho_vyucujiciho)
P.S. Diakritika do názvů sloupců či tabulek rozhodně nepatří, mohlo by se ti to později vymstít...
Ano vyučujícího mám vybraného (vybírám jako první pole), ale v takovém případě pokud zadám upravený SQL příkaz
SELECT Predmety.ID_predmetu, Predmety.Nazev_predmetu, Vyucujici.Katedra FROM Predmety WHERE Predmety.ID_katedra IN (SELECT Katedra FROM Vyucujici WHERE Vyucujici.ID_vyucujici = uci_predmety.ID_vyucujici);
vyvolá se okno zadat hodnotu parametrů uci_predmety.ID_vyucujici a Vyucujici.Katedra, tomu se chci vyhnout, chci automatizaci bez nutnosti vyplňovat parametr.
Diakritiku jsem opravil děkuji za upozornění.
Asi jsem to špatně vysvětlil.
v tabulce „uci_predmety“ jsou dva primární klíče, které v relaci N:M
odkazuji na Vyucujici.ID_vyucujici a Predmety.ID_predmety dle relací
přiložených v obrázku u původního dotazu.
Potřebuji vytvořit, když v tabulce „uci_predmety“ vyberu v prvním poli
„ID_vyucujici“ ze seznamu vyučujícího, tak aby se ve druhém poli
„ID_predmetu“ v seznamu zobrazili pouze předměty, které se učí na
katedře, ke které je přiřazen i vyučující. Pokud vyberu jiného
vyučujícího, který je z jiné katedry, tak se zobrazí zase jen předměty z
katedry, ke které je přiřazen i ten vyučující.
přikládám obrázek
přikládám i ukázku tabulek vyucujici predmety a katedry a ostatní
Tak ten select v závorce předělej na tu tabulku uci_predmety
Select id_predmetu from uci_predmety where id_vyucujici = vybrane id
A zbytečně do toho dotazu nemusíš dávat názvy tabulky, když nepoužíváš JOIN
v mysql bych napsal toto:
SELECT
`vp`.`id_vyucujici`,
CONCAT(`v`.`prijmeni`, ' ', `v`.`jmeno`) AS `vyucujici`,
GROUP_CONCAT( `p`.`predmet_nazev` ORDER BY `p`.`predmet_nazev` ASC SEPARATOR ', ') AS `predmety`
FROM
`vyucujici_predmety` `vp`
LEFT JOIN `vyucujici` `v` ON `v`.`id_vyucujici` = `vp`.`id_vyucujici` -- pripoj tabulku podle id
LEFT JOIN `predmet` `p` ON `p`.`id_predmet` = `vp`.`id_predmet` -- pripoj tabulku podle id
GROUP BY
`vp`.`id_vyucujici` -- vytvor skupiny podle id ucitele
ORDER BY
`vyucujici`
Jo, bylo by dobre, aby stejna id mela stejny nazev. Aby unikatni id tabulky
melo unikatni nazev. A abys dodrzoval jakesi jednotne pojmenovani, bud tam
pouzivej ucitel, ale ne vyucujici ani uci. Pak se v tom nevyznas. Zacnes priste
davat treba zkratky vyuc_ uc_ a pod
v MS SQL:
select
p.ID_predmetu,
p.Nazev_predmetu
from
Predmety p
join Katedry k on p.ID_katedra=k.ID_katedra
join Vyucujici v on k.ID_katedra=v.Katedra
where
v.ID_vyucujici=vybrane_id_ucitele
Tuším, že v Access by měl být inner join místo
join.
Rozhodně je pravda, co píše Peter Mlich a to sice práce s názvy.
Osobně nemám rád ani ty podtržítka, ale to je věc zvyku.
Vzhledem k charakteru relace mezi tabulkami Vyucujici, Katedry a Predmety, tak bych řekl, že by mělo fungovat i toto:
select
p.ID_predmetu,
p.Nazev_predmetu
from
Predmety p
join Vyucujici v on p.ID_katedra=v.Katedra
where
v.ID_vyucujici=vybrane_id_ucitele
Protože podmínka vybírající konkrétního vyučujícího zajišťuje v této architektuře i výběr konkrétní katedry ...
Ta architektura zachycuje jen jeden rok (aktuální stav) ?
Zobrazeno 10 zpráv z 10.