07. juni 2010 - 22:53
Der er
4 kommentarer og 1 løsning
Vælge funktioner der er dobbelt besat - eller funktioner der ikke er besat
Hej Eksperter Jeg har følgende tabeller i en database. CREATE TABLE person ( personId int, navn varchar(50), funktion int FOREIGN KEY REFERENCES funktion(funktionsId), PRIMARY KEY (personId) ) CREATE TABLE funktion ( funktionsId int, navn varchar(50), PRIMARY KEY (funktionsId) ) Tabellen funktion indeholder de funktioner der er i firmaet - og persontabellen de ansatte. Jeg har nu prøvet et par timer at få lavet 2 sql sætninger, der kan give mig følgende resultat: - en liste over funktioner, der ikke er besat - en liste over funktioner, der er besat med 2 eller flere personer Nogle der kan hjælpe mig henover den lille forhindring jeg er rendt ind i :) På forhånd tak Brian
Annonceindlæg fra Infor
1) select * from funktion F left join person P ON F.funktionid = p.personid where personid IS NULL 2) SELECT F.funktionid, F.Navn FROM person P INNER JOIN funktion F ON P.funktionid = F.funktionid HAVING COUNT(*) > 1 GROUP BY funktionid, F.Navn Jeg er lidt i tvivl om den Having, mener den skal være der ... ellers efter GROUP BY Det er ikke prøvet ... men burde give dig en ide om hvordan det kan løses hvis min kode ikke virker i første hug :-) mvh
De bør virke. Dog med F.funktionid = p.funktion og HAVING til sidst. Jeg ville nok lave den første som: select * from funktion F where funktionid not in (select funktion from person) men det er kun af æstetiske årsager
hehe, tror bare jeg antog at den også hed "funktionid" i den anden table :-)
Følgende 2 sætninger giver de ønskede resultater 1/ select * from funktion f left join person p on f.funktionsid = p.funktion where p.personid is null 2/ select f.funktionsid, f.navn from person p inner join funktion f on f.funktionsid = p.funktion group by f.funktionsid, f.navn having count(*) > 1 hvis i smider et svar, så bliver der uddelt point :) Tak for hjælpen /Brian
Computerworld tilbyder specialiserede kurser i database-management