Avatar billede pjatmadsen Nybegynder
27. august 2010 - 18:04 Der er 8 kommentarer og
1 løsning

Familie relation

Hej.
Jeg har lige en sql query jeg ikke lige kan få til at gå op.

Jeg har en tabel med personer i, [Person].
I den tabel ligger både børn og forældre, jeg har så lavet en anden tabel med en liste over relationer. [Relationer]
Det vil sige, at tabellen ser således ud id,fraperson,tilperson.

Nu vil jeg så gerne ha query der kan hive både barn og forældre ud på en linie.
Sådan så det kommer til at hedde barnnavn,mornavn, farnavn.
Jeg har prøvet lidt med at bruge sidste tal i cpr nummer. Altså lige/ulige til at afgøre om det er en mand eller kvinde der er dannet relation til, og herved mor eller far.

Min store hovedpine er, når barnet ikke har en far eller en mor.
Altså når kun en af dem fremgår.

Er der nogle der har en ide til hvordan jeg kan løse den?
Avatar billede arne_v Ekspert
27. august 2010 - 19:11 #1
Problemet med en manglende relation kan vel loeses ved brug af LEFT JOIN fremfor JOIN ?
Avatar billede pjatmadsen Nybegynder
27. august 2010 - 20:41 #2
Men en LEFT join hvor? Hvis man laver LEFT join imellem barnet og forældre, så finder den jo kun en. Hvis man laver 2 JOINS til begge forældre, så skal man jo kunne kende forskel på far og mor.
Men det skal så gøres uden både far og mor nødvendigvis er tilstæde.
Avatar billede jesperhgh Nybegynder
28. august 2010 - 19:32 #3
Jeg er ikke helt med...
Hvis der mangler enten en mor eller far, så giver det vel bare et tomt felt, som du så kan tildele en værdi med f.eks. NVL funktionen.

Som jeg forstår dig, så virker det for dig, når der både er en far og en mor. Er det korrekt?
Avatar billede showsource Seniormester
30. august 2010 - 17:35 #4
En tabel far
En tabel mor
En tabel kids med far og mor kolonne

I både far og mor tabel er et felt NULL for ukendt far/mor
Avatar billede pjatmadsen Nybegynder
30. august 2010 - 23:06 #5
Databasen er lavet så der er en tabel hvor alle personer er i.
Det vil sige, både far, mor og barn.

Jeg har selv kommet frem til, via joins og where at få et barn ud som følger.

Barn navn - Far navn - Far navn
Barn navn - Far navn - Mor navn
Barn navn - Mor navn - Mor navn

Det er så kun hvis barnet har begge forældre.
Ellers viser den kun den ene forældre i begge felter.

Måden det blev lavet på, er ved at lave 2 joins til min relations tabel. En til far og en til mor. Og så finder den jo logisk nok alle dem barnet har relation til.

Det er så her jeg er lidt stuck.
Avatar billede jesperhgh Nybegynder
31. august 2010 - 17:12 #6
Hvis det er et familie-stamtræ du har gang i, så overvej at lave det i Prolog.

Jeg har selv lavet mit stamtræ i Prolog, dette sprog er som konstrueret til dette. Se f.eks. her:

http://ktiml.mff.cuni.cz/~bartak/prolog/genealogy.html

Hvis du eventuelt senere har brug for hjælp til at lave funktioner, som f.eks. fætter, onkel eller tante (you name it), så står jeg gerne til rådighed.

Jeg har lavet et system, som dækker min familie i tre generationer, og koden fylder mindre end to skærmsider (incl. stamdata).
Avatar billede showsource Seniormester
31. august 2010 - 22:40 #7
"koden fylder mindre end to skærmsider" Den har jeg aldrig hørt før :O)

Anyway er det aldrig for sent at ændre tabelstruktur.
Avatar billede pjatmadsen Nybegynder
01. september 2010 - 00:23 #8
Det er det ikke, det er en del af en større database.
Den her function er kun en meget lille del af det.
Avatar billede pjatmadsen Nybegynder
26. november 2010 - 23:50 #9
Har selv fundet en løsning.
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