SQL mot mellantabell

Databaser & SQL

3 svar · 550 visningar · startad av Ola_M

Medlem sedan sep. 20012 inlägg
Trådstart#1

Jag har två tabeller teachers och classes. Dessa står i ett många-till-många-förhållande. Dvs varje
lärare kan vara inblandad i flera kurser och en kurs kan ha mer än en lärare. Har därför skapat en
mellantabell: teacherstoclasses. Att då ta reda på vilka lärare som ansvarar för en given kurs är
ju ingen konst. Inte heller att ta reda på vilka kurser en given lärare är inblandad i. Men hur
formulerar jag SQLen om jag vill lista de (om några) lärare som är inblandade i SAMTLIGA kurser.

Medlem sedan juni 20008 205 inlägg
#2

Den här var knepig :)
Om vi antar att primärnyckeln i teacher heter "t_id" och att primärnyckeln i class heter "c_id", och att kolumnerna i kopplingstabellen heter samma sak som det de refererar till (dvs c_id och t_id) så kan det se ut så här:

SELECT * FROM teacher t WHERE NOT EXISTS (
SELECT * FROM class c WHERE NOT EXISTS (
SELECT * FROM teachertoclasses tc WHERE tc.t_id = t.t_id AND c.c_id = tc.c_id
)
);
Medlem sedan sep. 20012 inlägg
#3

Tjusigt! Funkar! Tack!
Efter en stunds intensivt mediterande tycker jag mig till och med förstå varför den funkar.
Fast den känslan är ännu ganska flyktig;-)

Medlem sedan juni 20008 205 inlägg
#4

Hehe... då ska vi inte prata om vilken tid det tog att hitta på den :)

258 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)