Avatar billede pluth Nybegynder
13. juli 2011 - 13:56 Der er 11 kommentarer og
1 løsning

Join mellem 2 tabeller

Hej

Jeg ønsker fra en tabel, at joine over i en anden, hvor der findes mere end en record i den anden tabel. I tabel 1 er et kundenr. mens der i den anden er f.eks. navn og efternavn.

Hvordan får jeg alle felter i tabel2 på en linje ?
Avatar billede michael_stim Ekspert
13. juli 2011 - 14:19 #1
Ved ikke om jeg forstår:

SELECT t2.* FROM tabel1 t1, tabel2 t2 WHERE t1.kundenr=t2.kundenr;
Avatar billede pluth Nybegynder
13. juli 2011 - 14:32 #2
Det giver 2 linjer - En med navn og en med efternavn, da det er 2 records i databasen.
Avatar billede michael_stim Ekspert
13. juli 2011 - 14:37 #3
Fatter stadig ikke hvad du vil? Du må vel så finde ud af hvilken af de 2 records du vil hive fat i?
Avatar billede michael_stim Ekspert
13. juli 2011 - 14:43 #4
SELECT t2.navn FROM tabel1 t1, tabel2 t2 WHERE t1.kundenr=t2.kundenr;

SELECT t2.efternavn FROM tabel1 t1, tabel2 t2 WHERE t1.kundenr=t2.kundenr;
Avatar billede pluth Nybegynder
13. juli 2011 - 14:58 #5
Jeg prøver at uddybe

I Tabel 1 har jeg

Kundenummer

Eks.
1

i Tabel 2 har jeg

Kundenummer, feltnavn, Value

Eks.
1, Fornavn, Hans
1, Efternavn, Hansen
1, Adresse, Hansensgade 12


Jeg vil så gerne have resultatet ud som

1, Hans, Hansen, Hansensgade 12

Giver det maning ?
Avatar billede michael_stim Ekspert
13. juli 2011 - 15:12 #6
Så havde jeg nok tænkt om, af hensyn til design.

kundenr, fornavn, efternavn, adresse i samme tabel.
Avatar billede pluth Nybegynder
13. juli 2011 - 15:18 #7
Ja, det havde gjort det noget nemmere, men det er desværre ikke designet sådan..

Og jeg skal kun hente data ud fra det eksisterende.
Avatar billede Slettet bruger
13. juli 2011 - 17:50 #8
select Kundenummer
,max(case when Nr = 1 then Value end) Felt1
,max(case when Nr = 2 then Value end) Felt2
,max(case when Nr = 3 then Value end) Felt3
from
(
select t2.*
,row_number() over(partition by Kunenummer order by Feltnavn) Nr
from Tabel2 t2
) s1
group by Kundenummer
Avatar billede HenrikSjang Nybegynder
13. juli 2011 - 21:02 #9
Man vil også kunne joine tabel2 på tabel1 flere gange:

select
  tabel1.kundenummer,
  tabel2_1.value as Fornavn,
  tabel2_2.value as Efternavn,
  tabel2_3.value as Adresse
FROM tabel1
LEFT OUTER JOIN tabel2 as tabel2_1 ON tabel1.Kundenummer = tabel2_1.kundenummer and tabel2_1.feltnavn = 'Fornavn'
LEFT OUTER JOIN tabel2 as tabel2_2 ON tabel1.Kundenummer = tabel2_2.kundenummer and tabel2_2.feltnavn = 'Efternavn'
LEFT OUTER JOIN tabel2 as tabel2_3 ON tabel1.Kundenummer = tabel2_3.kundenummer and tabel2_3.feltnavn = 'Adresse'
Avatar billede pluth Nybegynder
14. juli 2011 - 12:03 #10
Sjang - Ja, det virker ;)

Udfordring nummer 2 er så, at feltnavnene pr. kundetype, kan skifte så fornavn for en anden kundetype kan hedde navn osv.

Det står i en tabel kaldet feltnavne - Kan man joine derover for at finde navnene til din SQL ?
Avatar billede pluth Nybegynder
28. juli 2011 - 07:09 #11
Sjang vil du svare, så jeg kan få det lukket spørgsmålet. Og endnu engang tak for din hjælp.
Avatar billede HenrikSjang Nybegynder
28. juli 2011 - 19:00 #12
:)
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