Avatar billede joemoz Nybegynder
28. december 2007 - 16:57 Der er 9 kommentarer

SQL query - kun én linje pr. firma ved sammenknytning af tabeller

Jeg skal udtrække data fra to tabeller der ser sådan ud:

TABEL 1:
ID1,NR,FIRMA,NAVN ('NR' unik nøgle)

TABEL 2:
ID2,NR,DATA ('NR' unik)

TABEL 3:
ID3,NR,EMAIL  (multiple af samme 'nr' mulige)

De tre tabeller er knyttet sammen via 'NR'-feltet.

Jeg vil gerne lave en query der giver følgende resultat:

FIRMA,NAVN,DATA,EMAIL

men kun en linje pr. firma, dvs. uanset at der måtte være flere e-mail adresser, så er det kun den første der kommer med. Hvordan kan jeg gøre det?

(Resultatet skal se ud ligesom det man får ved "SELECT tabel1.firma,tabel1.navn,tabel2.data,tabel3.email FROM tabel1, tabel2, tabel3 WHERE tabel1.nr=tabel2.nr AND tabel1.nr=tabel3.nr" men altså med kun én linje pr. firma).
Avatar billede jensgram Nybegynder
28. december 2007 - 17:10 #1
SELECT DISTINCT tabel1.firma ... ?
Avatar billede erikjacobsen Ekspert
28. december 2007 - 19:08 #2
Når der så er mere end een email mulig pr firma, hvilken skal den så tage?
Avatar billede joemoz Nybegynder
28. december 2007 - 19:20 #3
Jeg tror ikke at 'DISTINCT' forhindrer at der kommer mere end én e-mail adresse med?

Mht. e-mail adressen, så skal den bare tage den første den finder.
Avatar billede erikjacobsen Ekspert
28. december 2007 - 19:31 #4
SELECT tabel1.firma,tabel1.navn,tabel2.data,max(tabel3.email) FROM tabel1, tabel2, tabel3 WHERE tabel1.nr=tabel2.nr AND tabel1.nr=tabel3.nr group by tabel1.firma,tabel1.navn,tabel2.data
Avatar billede hrc Mester
28. december 2007 - 23:06 #5
Formålet med denne select er at returnere en email-adresse, ikke? Hvorfor så joine med tabel2? Hvad med de firmaer der ikke har en email? Skal der være null i kolonnen eller skal de ikke med?

Hvis muligt bør du revidere felternes navne. Jeg har fundet det mest hensigtsmæssigt at man simpelthen kalder fremmednøglen <tabelnavn>_<primærnøgle>, eksempelvis firma_nr. På den måde er man aldrig i tvivl. Desuden ville jeg overveje at fjerne ID'erne - eller omdøbe nr til ID, dvs. Det er mere logisk at nøglerne hedder ID fremfor Nr.

Firma:
ID,FIRMA,NAVN ('ID' primærnøgle)

Data:
ID,firma_ID,DATA ('ID' primærnøgle, firma_ID fremmednøgle)

EMail:
ID,firma_ID,EMAIL ('ID' primærnøgle, firma_ID fremmednøgle)
Avatar billede joemoz Nybegynder
28. december 2007 - 23:38 #6
@hrc
Tak, men navnene her er bare eksempler - den rigtige tabel hedder noget andet. Og formålet er ikke at finde e-mail adresser, men at udtrække data om firmaerne, inklusiv e-mail adresse som står i en separat tabel.

@erik
Det ser fornuftigt ud - jeg prøver det, smid lige et svar.
Avatar billede erikjacobsen Ekspert
29. december 2007 - 00:03 #7
Jeg samler slet ikke på point, tak.  Men prøv, og fortæl om den giver et fornuftigt resultat.
Avatar billede joemoz Nybegynder
29. december 2007 - 00:58 #8
Det gør det vist, men jeg har så det nye problem at jeg i mit resultat bruger "EMAIL", som nu ikke længere findes i resultatsættet...Hvad kan jeg mon gøre ved det?
Avatar billede erikjacobsen Ekspert
29. december 2007 - 08:57 #9
max(tabel3.email) as email
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