Gå til innhold

Tabell med flere fremmednøkler i samme rad


Anbefalte innlegg

Jeg vet ikke om det er god databasedesign, men jeg har ikke noe valg, ettersom jeg har fått dataene fra andre.

 

Problemet er at jeg i en tabell1 har rader som:

PersonID, ID*, ID*, ID*

 

Og i en annen tabell2 har:

ID, IDforklaring

 

Ønsker å gjøre en spørring (view), som genererer følgende liste:

PersonID, IDforklaring, IDforklaring, IDforklaring

 

Altså at ID erstattes med IDforklaring ved en spørring. Kunne selvfølgelig kjørt en UPDATE i tabell1, som legger IDforklaring i en egen kolonne ved siden av ID, men dette vil ta mye plass, og jeg regner med at det finnes en fiffigere løsning.

 

Takker for tips!

Lenke til kommentar
Videoannonse
Annonse

Mulig jeg misforstår, men jeg ser ikke hvordan det kan løse problemet. Hvis en person_id har fem ulike person_type_id, så må jo en person_id ligge fem ganger i en slik ekstra tabell.

 

F.eks. kan du tenke deg at tabell1 inneholder en person_id, og landskoden for de fem siste landene vedkommende besøkte, slik:

person_id | landskodeA | landskodeB | landskodeC | landskodeD | landskodeE

I tabell2 ligger det kun to kolonner:

landskode | landsnavn

Alle landskodene i tabell1 ligger altså i tabell2.

 

Søkeresultatet skal vise:

person_id | landsnavnA | landsnavnB | landsnavnC | landsnavnD | landsnavnE

Det er ikke noe problem å få riktig landsnavn hvis jeg kun knytter én landskode til landsnavn, men hvis jeg knytter landskodeA og landskodeB til tabell2.landskode, får jeg NULL på begge.

 

Kan nok omgå problemet ved å lage fem like versjoner av tabell2, slik at landskodeA knyttes til tabell2A, landskodeB til tabell2B osv. Men denne løsningen virker ikke spesielt elegant.

Lenke til kommentar

select
 t1.person_id,
 t2_1.landsnavn as landsnavnA,
 t2_2.landsnavn as landsnavnB,
 t2_3.landsnavn as landsnavnC,
 t2_4.landsnavn as landsnavnD,
 t2_5.landsnavn as landsnavnE
from tabell1 t1
 join tabell2 t2_1 on t2_1.landskode = t1.landskodeA
 join tabell2 t2_2 on t2_2.landskode = t1.landskodeB
 join tabell2 t2_3 on t2_3.landskode = t1.landskodeC
 join tabell2 t2_4 on t2_4.landskode = t1.landskodeD
 join tabell2 t2_5 on t2_5.landskode = t1.landskodeE

 

Tenker du på noe sånt?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...