Avatar billede walker Nybegynder
01. august 2003 - 09:37 Der er 6 kommentarer og
1 løsning

Avanceret Joins (tja)

Hey.
Kan nogen hjælpe mig med at løse et lille problem med et sql udtræk.

Har følgende tabeller:
USER: uid(pk),uname
TEAM: proj(pk), uid(pk)
PROJ: proj(pk), projname

Foreign keys:
TEAM.uid->USER.uid
TEAM.proj->PROJ.proj

(håber i forstår hvad jeg mener ;o) )
Måden tabellerne fungerer på er at har et antal projekter. Til hvert projekt kan der være tilknyttet 1-M brugere. Det jeg så gerne vil nu, er at selecte de projekter, hvor en bestemt bruger IKKE er tilknyttet, ud fra et brugernavn (USER.uname). Derfor skal jeg ha join'et alle tabellerne, men hvordan?

Mvh
Walker
Avatar billede arne_v Ekspert
01. august 2003 - 10:10 #1
Alt andet end MySQL:

SELECT projname FROM proj WHERE proj NOT IN
(SELECT proj FROM proj,team,user WHERE proj.proj=team.proj AND team.uid=user.uid AND user.uname='xxxxx');
Avatar billede arne_v Ekspert
01. august 2003 - 10:18 #2
Jeg kan dæleme ikk elige se hvordan man gør det i MySQL uden
NOT IN SELECT.

Men du kunne jo lave det i din applikation med to gange SELECT.

SELECT proj FROM proj,team,user WHERE proj.proj=team.proj AND team.uid=user.uid AND user.uname='xxxxx'

og:

SELECT projname FROM proj WHERE proj NOT IN (liste fr aførste query adskilt af komma)
Avatar billede andy Nybegynder
01. august 2003 - 11:30 #3
Kan man bruge left join i denne forbindelse?

SELECT proj.projname FROM proj LEFT JOIN team ON proj.proj=team.proj LEFT JOIN user ON team.uid=user.uid WHERE user.uid IS NULL
Avatar billede jinxit Nybegynder
01. august 2003 - 14:16 #4
SELECT proj.projname
FROM proj, team JOIN user ON team.uid=user.uid AND user.uid != 'xxx'
WHERE proj.proj = team.proj
UNION
SELECT proj.projname
FROM proj LEFT JOIN team ON proj.proj=team.proj
WHERE team.uid IS NULL

Så burde du få alle projekter som brugeren ikke er med i samt alle projekter som ingen er med i...
Avatar billede jinxit Nybegynder
01. august 2003 - 14:27 #5
Nej, forresten det går ikke.

Den første del kan godt returnere projekter som brugeren er i, hvis en anden bruger også er med i projektet...
Avatar billede jinxit Nybegynder
01. august 2003 - 14:28 #6
Livet ville være meget nemmere hvis MySQL understøttede EXCEPT
Avatar billede walker Nybegynder
16. august 2003 - 09:15 #7
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester