IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Radek Morris Sedláček:8.3.2020 2:13

Potřebuji v Access databázi vytvořit výběrový dotaz pro tabulku s relací N:M celá databáze je vložena v obrázku jako relace.
V této chvíli jsou v rámci vyhledávání v tabulce uci_predmety dva výběrové dotazy, které slouží k zadávání hodnot.
V poli ID_vyucujici je to

SELECT Vyucujici.ID_vyučujici, Vyucujici.Prijmeni_vyucujici, Vyucujici.Jmeno_vyucujici FROM Vyucujici ORDER BY Vyucujici.Prijmeni_vyucujici;

V poli ID_predmety je to

SELECT Predmety.ID_predmetu, Predmety.Nazev_predmetu FROM Predmety ORDER BY Predmety.ID_katedra;

Zkusil jsem: Zkoušel jsem zadat do kriterii parametr

Predmety.ID_katedra = Vyucujici.Katedra

bohužel výběr nefunguje.

Chci docílit: Snažím se dosáhnout, aby se při přiřazování předmětu k vyučujícímu, zobrazily pouze předměty z katedry, ve které je přiřazen i vyučující bez nutnosti vyplňovat nebo zadávat parametr ručně.

Editováno 8.3.2020 2:15
Odpovědět
8.3.2020 2:13
Při dotazování se povzneste nad pocit, že můžete působit dojmem nejhloupějšího člověka v místnosti. [Jack Welch]
Avatar
Radek Morris Sedláček:8.3.2020 2:16

Obrázek relací a struktury tabulek
dotaz je pro tabulku uci_predmety

Editováno 8.3.2020 2:18
Nahoru Odpovědět
8.3.2020 2:16
Při dotazování se povzneste nad pocit, že můžete působit dojmem nejhloupějšího člověka v místnosti. [Jack Welch]
Avatar
Odpovídá na Radek Morris Sedláček
Michal Štěpánek:8.3.2020 3:56

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...

Nahoru Odpovědět
8.3.2020 3:56
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Radek Morris Sedláček:8.3.2020 4:43

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_vy­ucujici a Vyucujici.Katedra, tomu se chci vyhnout, chci automatizaci bez nutnosti vyplňovat parametr.

Diakritiku jsem opravil děkuji za upozornění.

Nahoru Odpovědět
8.3.2020 4:43
Při dotazování se povzneste nad pocit, že můžete působit dojmem nejhloupějšího člověka v místnosti. [Jack Welch]
Avatar
Radek Morris Sedláček:8.3.2020 5:32

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_vy­ucujici a Predmety.ID_pred­mety 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

Editováno 8.3.2020 5:34
Nahoru Odpovědět
8.3.2020 5:32
Při dotazování se povzneste nad pocit, že můžete působit dojmem nejhloupějšího člověka v místnosti. [Jack Welch]
Avatar
Radek Morris Sedláček:8.3.2020 5:43

přikládám i ukázku tabulek vyucujici predmety a katedry a ostatní

Nahoru Odpovědět
8.3.2020 5:43
Při dotazování se povzneste nad pocit, že můžete působit dojmem nejhloupějšího člověka v místnosti. [Jack Welch]
Avatar
Odpovídá na Radek Morris Sedláček
Michal Štěpánek:8.3.2020 19:26

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
Nahoru Odpovědět
8.3.2020 19:26
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Radek Morris Sedláček
Michal Štěpánek:8.3.2020 19:28

A zbytečně do toho dotazu nemusíš dávat názvy tabulky, když nepoužíváš JOIN

Nahoru Odpovědět
8.3.2020 19:28
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9.3.2020 10:09

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 :)

Editováno 9.3.2020 10:11
 
Nahoru Odpovědět
9.3.2020 10:09
Avatar
Jiří Hlaváček:13.3.2020 23:12

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) ?

 
Nahoru Odpovědět
13.3.2020 23:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.