Citat:
A moze li to bez ugnjezdenog upita ?
Moze, ovako:
SELECT N.*
FROM Nastavnici AS N
LEFT JOIN Angazovanje AS A ON N.ID_Nastavnik =A.ID_Nastavnik
WHERE A.ID_Nastavnik IS NULL
Za tabele sa mnogo rekorda, iskaz sa NOT IN (Select....) moze da bude jako spor, jer se subquery izvrsava za SVAKI rekord u glavnom kveriju.
SELECT * FROM Nastavnici
WHERE ID_Nastavnik NOT IN (SELECT ID_Nastavnik FROM Angazovanje)
Ako imas 20,000 nastavnika za svih 20,000 izvrsice se deo (SELECT ID_Nastavnik FROM Angazovanje) koji svaki put vraca 20,000 rekorda. Znaci, 20,000 puta 20,000.
Moze i ovako:
SELECT N.*
FROM Nastavnici AS N
WHERE NOT EXISTS (SELECT A.ID_Nastavnik FROM Angazovanje AS A WHERE A.NastavnikID=N.NastavnikID)
Ovde subquery za svakog nastavnika vraca samo onoliko rekorda koliko taj anstavnik ima predmeta, znaci 2-3 po jednom rekordu glavnog kverija. Ako u subquery koristis SELECT TOP 1 A.ID_Nastavnik , bice jos brze, maksimalno jedna rekord u subkveriju.
:-)