Avatar billede x4all_dk Nybegynder
10. august 2004 - 12:41 Der er 9 kommentarer og
1 løsning

Problemer med en SQL med JOINS

Jeg skal have flg. ud af nogle tabeller:
[navn][by][job]

Tabellerne er:
NAVN:[id][navn]
BY:[id][by]
JOB:[id][job]

KBL_by: [navn_id][by_id]
KBL_job: [navn_id][job_id]

Jeg har lavet en SQL emd LEFT JOIN og RIGHT JOIN, men jeg
får for "mange"... så min SQL laver noget kartetiskprodukt sjov.

Jeg inkluderer ikke min SQL her, men håber der er en som
gider at lave en flot SQL med JOINS :)

(ps. dette er en forsimpling af de rigtige tabeller og navne)
Avatar billede fennec Nybegynder
10. august 2004 - 13:01 #1
Sådan:
select navn, [by], job from NAVN LEFT JOIN [BY] on BY.id=navn.by_id LEFT JOIN JOB on JOB.id=NAVN.job_id

eller:
select navn, [by], job from NAVN, [BY], JOB where BY.id=navn.by_id and JOB.id=NAVN.job_id

Ved ikke helt om det er sådan du mener.

Det er i øvrigt ikke godt at bruge ordet by som tabel navn eller kolonne, da det er et reserveret ord. Det går med [] omkring, men det er sikre at bruge et andet navn, så man ikke kommer til at glemme [].
Avatar billede x4all_dk Nybegynder
10. august 2004 - 13:12 #2
Det tror jeg ikke virker.

f.eks. findes "NAVN.job_id" ikke :(
Avatar billede x4all_dk Nybegynder
10. august 2004 - 13:14 #3
Tabelnavnet [By] er fiktivt, men du har ret - det er dumt at kalde den for det, og jeg havde glemt det da jeg skrev spm.
Avatar billede arne_v Ekspert
10. august 2004 - 13:15 #4
SELECT *
FROM navn,by,job,kbl_by,kbl_job
WHERE navn.id=kbl_by.navn_id AND navn.id=kbl_job.navn_id AND
      by.id=kbl_by.by_id AND job.id=kbl_job.job_id
Avatar billede fennec Nybegynder
10. august 2004 - 13:19 #5
Nu forstod jeg det. KBL_by og KBL_job er også tabeller....
Arne_v har løsningen. Den kan også skrives med LEFT JOIN, men det er der jo ingen grund til nu :o)
Avatar billede x4all_dk Nybegynder
10. august 2004 - 13:24 #6
Ups. Jeg glemte vist at skrive at det er IKKE sikkert at en person har et job,
men så skal der fremgå af resultatet.

F.eks. kan følgende forekommer:

[navn][by][job]
  per      bankmand
otto  Ry  røver
  lis  Als Pianist

Så jeg tror vi skal have LEFT JOINS med i billedet, men
jeg har problemer med at få det "rigtige" ud :(
Avatar billede x4all_dk Nybegynder
10. august 2004 - 13:27 #7
ehh.. jeg glemte vist det tilfælde som jeg beskrev :)

[navn][by][job]
per    als 
otto  ry  røver
lis        pianist

Dette skulle vist dække mulighederne.
Avatar billede fennec Nybegynder
10. august 2004 - 13:34 #8
Så prøv denne:
select navn,by,job from navn left join KBL_by on KBL_by.navn_id=navn.id left join BY on KBL_by.by_id=by.id left outer join KBL_job.navn_id=navn.id left outer join JOB on job.id=KBL_job.job_id

Hvis der heller ikke nødvendigvis kan være en by på en person skal alle join være left outer join.
Avatar billede x4all_dk Nybegynder
12. august 2004 - 14:23 #9
fennec ->  Tak for hjælpen. Det var lige hvad jeg manglede. Smid et svar hvis du vil have point.
Avatar billede fennec Nybegynder
12. august 2004 - 15:34 #10
svar.
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