qdos Skrevet 14. september 2007 Rapporter Del Skrevet 14. september 2007 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
siDDis Skrevet 14. september 2007 Rapporter Del Skrevet 14. september 2007 Tabell1 Person Person_ID, Person_Type 1337, 3 Tabell2 Persontype Person_Type_ID, Person_Type_Beskrivelse 3, SQL-slave SELECT person.person_ID, persontype.Person_Type_Beskrivelse FROM person INNER JOIN persontype ON person.person_Type = persontype.person_type_id; Sånt som det? Lenke til kommentar
qdos Skrevet 15. september 2007 Forfatter Rapporter Del Skrevet 15. september 2007 Ja, den måten fungerer når det er snakk om én Person_Type_Beskrivelse, men problemet er at det er flere Person_Type_ID for hver person, og da får jeg kun NULL på alle beskrivelsene. Lenke til kommentar
siDDis Skrevet 15. september 2007 Rapporter Del Skrevet 15. september 2007 Da blir det jo ein mange til mange relasjon, då lager du ein ekstra tabell, som har to kolonner, person id og person_Type_id Lenke til kommentar
qdos Skrevet 15. september 2007 Forfatter Rapporter Del Skrevet 15. september 2007 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
anders02 Skrevet 15. september 2007 Rapporter Del Skrevet 15. september 2007 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
qdos Skrevet 15. september 2007 Forfatter Rapporter Del Skrevet 15. september 2007 Ja det ser i alle fall logisk ut. Får ikke testet det før tirsdag. Takk for tipset! Lenke til kommentar
qdos Skrevet 17. september 2007 Forfatter Rapporter Del Skrevet 17. september 2007 Ja det fungerte som bare juling! Eneste endring jeg måtte gjøre var en left outer join i stedet for join, for å få med alle rader, ettersom en del felter i tabell1 var tomme. Takk for hjelpen! Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå