Avatar billede Slettet bruger
29. oktober 2001 - 17:16 Der er 9 kommentarer og
3 løsninger

Relationer

Jeg har 3 forskellige tabeller

Tabel Person      Tabel telefon    Tabel cpr
ID (Primær)        555-1231241      120275-4323
char navn          555-9838456      130376-2345
char telefon      555-4676788      140477-7347
char cpr

\"telefon\" og \"cpr\" referere til data i de to tabeller af same navn. Så en record af i tabellen person f.eks. kan være:

Mads Madsen 555-4676788 140477-7347

Hvordan laver jeg denne relation i MySQL når der ikke understøttes fremmednøgler?           
Avatar billede mortenfn Nybegynder
29. oktober 2001 - 17:22 #1
select telefon_tabel.*,cpr_tabel.* where persom_tabel.telefon = telefontabel.nr and person_tabel.cpr = cpr_tabel.nr

ellers må du brige join
Avatar billede alvion Nybegynder
29. oktober 2001 - 17:22 #2
Relationen er blot en du selv definerer. At MySQL ikke understøtter fremmednøgler betyder blot, at du selv skal sørge for konsistensen af dine data. Det skal du gøre i det program, som du bruger dine data i.
Avatar billede mortenfn Nybegynder
29. oktober 2001 - 17:24 #3
Avatar billede morw Nybegynder
29. oktober 2001 - 17:25 #4
Tabel 1: person
id int/primær/autoincrement
navn varchar
cpr varchar

Tabel 2: telefon
person_id int
nummer varchar

Du skal vel ikke bruge flere end to tabeller da en person ikke har mere end et cprnummer.

Sådan henter du data ud.

SELECT person.id, person.navn, telefon.nummer
FROM person
LEFT JOIN telefon ON telefon.bruger_id = person.id


Avatar billede Slettet bruger
29. oktober 2001 - 17:33 #5
Hvad når der skal indsættes data?? Her skal et telefonnummer jo eksistere i telefon tabellen før
før query er \"lovligt\"??

Avatar billede alvion Nybegynder
29. oktober 2001 - 17:36 #6
Det skal du selv kontrollere (med SELECT) inden du indsætter.
Avatar billede disky Nybegynder
30. oktober 2001 - 08:56 #7
morw:

Hvad er fordelen ved at bruge left join from for
SELECT person.id, person.navn, telefon.nummer
FROM person where telefon.bruger_id = person.id
??


Avatar billede morw Nybegynder
30. oktober 2001 - 23:00 #8
disky> overskuelighed!

Hvis du har 6 LEFT JOINs og en motherfucker WHERE del, så er der nemmere på denne måde.

Har dog læst i mysql.com/doc at mysql laver JOINS om til en del af where clausen.

Skal dog også huske på at når du bruger tabel1.felt1 = tabel2.felt1 metoden så er det vel en outerjoin og ikke en left join.

Avatar billede disky Nybegynder
31. oktober 2001 - 09:21 #9
okay, så lærte jeg også noget i dag :)

Kan du huske om Mysql 4.0 tillader sub selects ?

Det savner man virkeligt når man har rodet med prof. databaser
Avatar billede alvion Nybegynder
31. oktober 2001 - 10:00 #10
Nej vist nok først i version 4.1
Avatar billede disky Nybegynder
31. oktober 2001 - 10:02 #11
dooooh.

Hvornår bliver mysql voksen ??

I det mindste kan V4 da stored procedures, så nu mangler der kun views, triggers, og sub select
Avatar billede alvion Nybegynder
31. oktober 2001 - 11:13 #12
Stored Procedures? Nope det kommer også først i 4.1

http://www.mysql.com/doc/N/u/Nutshell_4.1_development_release.html
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