Avatar billede bongo20 Nybegynder
19. september 2002 - 11:25 Der er 11 kommentarer og
1 løsning

Sammkædning af tabeller

Goddag!
Jeg har brug for at finde ud af hvordan man sammenkører tabeller i access eller msSQL.

Jeg har en tabel1 med et unikt ID, et navn på en producent og et modelID.
Derudover har jeg en tabel2 med et Unikt ID, producentnavnet, og modelnavnet.

Jeg vil gerne have en ny tabel3 som indeholder Unikt ID, Producent ID, og modelnavnet.
Producent ID´et skal ikke bare være unikt for hver producent men også for hvilke modeller han producerer.
Altså ProducentID = ID i tabel1
Avatar billede katborg Praktikant
19. september 2002 - 11:38 #1
Hvis "unikt ID" er ens i begge tabeller, laver du en forspørgsel hvor du "joiner" de to felter, og medtager de felter du skal bruge, gemmer forspørgslen.

Herefter kan du "importerer" forspørgslen som en tabel
Avatar billede lasse_buck Nybegynder
19. september 2002 - 11:51 #2
Jeg skal (som sædvanlig) have bekræftet, om jeg har forstået spørgsmålet korrekt.

Når dine felter har fornuftige navne, så bør dine tabeller også. Jeg har lavet et eksempel, som forhåbentlig er det du skriver/skal bruge:
(PK markerer de felter, som udgør primærnøglen)

producent:
PK  ID
    producentnavn

model:
PK  ID
    modelnavn

producentModelRelation:
    ID
PK  ProducentID
PK  modelID

Kommentarer:
Kombinationen af producent og model skal være unik (PK) i tabellen producentModelRelation. Feltet ID er næsten overflødigt (?)
Hver række i tabellen producentModelRelation beskriver en model, som en producent producerer.
Der skal laves (fremmednøgle) relationer, så ProducentID og modelID peger på ID i tabellerne producent og model.

Når du gerne vil præsentere det du kalder tabel 3, så kan du lave en Query i Access eller et view i msSQL:
SELECT producentModelRelation.ID, producentModelRelation.ProducentID, model.modelnavn FROM producentModelRelation, model WHERE producentModelRelation.modelID = model.ID;

Måske vil du hellere vise:
SELECT producent.producentnavn, model.modelnavn FROM producent, model, producentModelRelation.modelID
WHERE producentModelRelation.modelID = model.ID AND producentModelRelation.producentID = producent.ID
ORDER BY producent.producentnavn;
Avatar billede bongo20 Nybegynder
19. september 2002 - 13:09 #3
Det er ikke helt sådan Lasse.
Mine tabeller ser sådan ud :

Producent:
PK  ID
    TypeID
    producentnavn

model:
PK  ID
    ProducentNavn
    modelnavn

Her den nye :

NyModel(erstatning for Model)
PK  ID
    ProducentID
    modelNavn

Altså: ProducentNavn skal udskiftes med ProducentID og dette producentID er det samme som Id i Producent
Avatar billede jkrons Professor
19. september 2002 - 13:57 #4
Hvis jeg har forstået dig ret, så noget i denne stil måske:

SELECT Model.[PK ID], Producent.[PK ID], Modelnavn INTO nyModel
FROM Model INNER JOIN Producent ON Model.[PK ID] = Producent.[PK ID];
Avatar billede terry Ekspert
19. september 2002 - 14:07 #5
bongo> you ronly allowed to place the same question once!
http://www.eksperten.dk/spm/259771
Avatar billede lasse_buck Nybegynder
19. september 2002 - 14:12 #6
jkrons > PK er ikke en del af feltnavnet. PK angiver bare hvilke felter der danner primærnøglen i tabellen :o)
SELECT Model.ID AS ModelID, Producent.ID AS ProducentID, Modelnavn INTO nyModel
FROM Model INNER JOIN Producent ON Model.ID = Producent.ID;

bonko20 > Jeg kan ikke rigtig regne ud, om NyModel bare skal vælge data fra de andre tabeller - så kunne NoModel jo være en forespørgsel i stedet for en tabel.
Avatar billede bongo20 Nybegynder
19. september 2002 - 14:14 #7
Der er ingen ID´er der passer så der kan joines :((
Avatar billede katborg Praktikant
19. september 2002 - 14:19 #8
Hvis ingen sammenhæng har mellem 'Producent' og 'model' bliver det vist svært.

Er der ikke nogen sammenhæng mellem 'TypeID' og 'modelNavn' ? evt. via en 3. tabel ?

Svarer 'Producentnavn' i 'Producent' og 'model' til hinanden ?
Avatar billede lasse_buck Nybegynder
19. september 2002 - 14:22 #9
bongo20 > Jeg synes din model trænger til at blive strammet lidt op:
tabellen model og NyModel indeholder i information af præcis type.
Hvad med at lade tabellen model indeholde BÅDE nye og gamle modeller?
Du kan stadig have en tabel NyModel:
NyModel:
PK  ID
    modelID    (peger på et ID i tabellen model)

Du kan stadig få de samme data ud:
SELECT NyModel.ID, NyModel.ProducentID, model.modelNavn
FROM NyModel, model WHERE NyModel.modelID = model.ID


eller måske skal tabellen vise både ny og gammel model:
NoModel:
PK  ID
    NyModelID        (peger på et ID i tabellen model)
    GammelModelID    (peger på et ID i tabellen model)
Avatar billede lasse_buck Nybegynder
19. september 2002 - 14:35 #10
bonko20 > Du har bla. problemer fordi din model ikke er normaliseret - du kan læse om normalsering senere :o)
Nogle steder anvender du ProducentID og andre steder anvender du producent(navn), så bliver det ekstra kompliceret (men ikke umuligt) at lave joins.

Tag et ekstra kig på min første model. Hvis den skal ligne din problemstilling, så laver vi lige navnene om:

producent:
PK  ID
    producentnavn

modelnavn:
PK  ID
    modelnavn

model:
( UK betyder unik nøgle (Unique Key) )
PK    ID
UK  ProducentID (peger på ID i producent)
UK  modelnavnID (peger på ID i modelnavn)

NyModel:
PK  ID  (Nye modeller på model tabellen - et ekstra ID er nok overflødigt)
UK  modelID (peger på ID i model)
Avatar billede bongo20 Nybegynder
19. september 2002 - 14:39 #11
undskyld ulejligheden, men jeg har taget den oprindelige Notes fil og lavet de udtræk jeg skal bruge,...det andet er vist for bøvlet :)
Avatar billede lasse_buck Nybegynder
19. september 2002 - 14:54 #12
bongo20 > Hvis det 'kun' var et spørgsmål om at trække data ud, så tror jeg, at katborg var meget tæt på det rigtige svar.

Fandt aldrig ud af, om det bare var en join du skulle bruge. Mine svar gik på oprettelse af en ny database.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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