Avatar billede Lasse Novice
28. maj 2002 - 17:15 Der er 8 kommentarer og
1 løsning

Problem med def. af tabeller

Jeg er igang med at konstruere en db. Men jeg har alvorlige problemer. Jeg har indtil videre en smaa 10 tabeller, men problemet ligger omkring 2 af disse. Herunder er opbygningen af disse 2:

tabel C:
CarCode(en unik kode for en bil), OrgPartNr(unik kode for en part i en bil)
hvor begge udgoer PK

tabel P:
OrgPartNr(unik kode for en part i en bil), ECode(unik kode for udseendet af en part), + flere
hvor OrgPartNr er PK

Jeg faar nu en stak OrgPartNr, og jeg vil gerne se om jeg har dem i forvejen. I tilfaelde af at jeg har dem i forvejen, vil jeg se hvilken CarCode jeg kan hente det fra. Dette kan goeres saaledes:

select CarCode, C.OrgPartNr, Ecode from C, P where C.OrgPartNr=P.OrgPartNr and (C.OrgPartNr=part1 or C.OrgPartNr=part2 or C.OrgPartNr=part3)

Problemet er saa: Dette udtraek giver mig flere flere rows med samme OrgPartNr, da den samme OrgPartNr godt kan forekomme i flere biler(det kunne vaere at rattet i en Audi TT var det samme som de brugte i A4). Hvordan kommer jeg udenom dette? Laver jeg db'en forkert?
Avatar billede tmceu Praktikant
28. maj 2002 - 17:30 #1
Brug DISTINCT(felt)
Avatar billede tmceu Praktikant
28. maj 2002 - 17:34 #2
Måske et lidt kortfattet svar :-)

Det er måske noget i denne stil du tænker på:

select CarCode, C.OrgPartNr, Ecode from C, P where C.OrgPartNr IN(SELECT DISTINCT OrgPartNr FROM P) and (C.OrgPartNr=part1 or C.OrgPartNr=part2 or C.OrgPartNr=part3)
Avatar billede Lasse Novice
28. maj 2002 - 17:49 #3
nej, det ville ikke give mig det rigtige resultat...

select distinct OrgPartNr from P... det er jo alle OrgPartNr, da det jo er en PK(primary key)

Faktisk ville det ikke goere noget med noget redundans her. Laeg begge tabeller sammen, saaledes at det bliver(hvis det er nemmere paa den tidligere naevnte maade, saa tager jeg bare den):

tabel K:
CarCode, OrgPartNr, ECode, + flere

men det er stadig det samme problem. Jeg skal have raekker ud, hvor udtraekket (hvis man kan sige dette) har OrgPartNr som unique key.
Avatar billede tmceu Praktikant
28. maj 2002 - 17:56 #4
Forklar mig så lige hvilke OrgPartNr du mener. Fra hvilken tabel vil du have unikke værdier ?
Avatar billede Lasse Novice
28. maj 2002 - 18:06 #5
Ok, jeg laver lige et eksempel fra foerste omgang:

tabel C:
CarCode, OrgPartNr
------------------
ANDERS, o1
ANDERS, o2
ANDERS, o3
ANDERS, o4
ANDERS, o5
PETER, o1
PETER, o3
PETER, o5

tabel P:
OrgPartNr, ECode, +flere
------------------------
o1, E1,
o2, E2,
o3, E3,
o4, E4,
o5, E2,

select CarCode, C.OrgPartNr, Ecode from C, P where C.OrgPartNr IN(SELECT DISTINCT OrgPartNr FROM P) and (C.OrgPartNr=o1 or C.OrgPartNr=o2 or C.OrgPartNr=o3) giver:

Resultat(er lavet i hovedet, saa baer over med mig, hvis der er smaa fejl)
CarCode, C.OrgPartNr, Ecode
---------------------------
ANDERS, o1, E1
ANDERS, o2, E2
ANDERS, o3, E3
PETER, o1, E1
PETER, o3, E3

Dette er IKKE det jeg oensker. Her har jeg ikke OrgPartNr som UNIK key. Det medfoerer at jeg faar at vide at jeg kan hente delen fra CarCode PETER og ANDERS, hvilket ikke er oenskeligt. Jeg skal bare have eet sted hvor jeg kan hente det fra..
Avatar billede tmceu Praktikant
28. maj 2002 - 18:39 #6
Denne bliver lidt rodet, men det er den eneste jeg kan komme på lige nu:

select DISTINCT (SELECT TOP 1 CarCode
from CarCode C2, Parts P2
where C2.OrgPartNr=P2.OrgPartNr and (C2.OrgPartNr='o1' or C2.OrgPartNr='o2' or C2.OrgPartNr='o3')) AS CarCode
, C.OrgPartNr, Ecode
from CarCode C, Parts P
where C.OrgPartNr=P.OrgPartNr and (C.OrgPartNr='o1' or C.OrgPartNr='o2' or C.OrgPartNr='o3')

Jeg kom til at oprette OrgpartNr som varchar, så nu er det din tur til at bære over med mig :-)
Avatar billede hansk Nybegynder
28. maj 2002 - 20:57 #7
Hej GOOKY, fik du løst dit problem?
Hvis ikke burde du kunne bruge flg. SQL:

SELECT C.CarCode, C.OrgPartNr, Max(P.Ecode) FROM C, P
WHERE  C.OrgPartNr=P.OrgPartNr AND C.OrgPartNr IN (part1,part2,part3)
Avatar billede tmceu Praktikant
28. maj 2002 - 21:02 #8
hansk >> der mangler en GROUP BY, når du anvender MAX og hvis du tilføjer eks. GROUP BY C.CarCode, C.OrgPartNr får du samme resultat som det oprindelige :-)
Avatar billede Lasse Novice
19. juni 2002 - 23:50 #9
hmm, ser lidt rodet ud... men hvad fanden
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

IT-JOB

Politiets Efterretningstjeneste

AI/ML udvikler i PET

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Netværkstekniker til Forsvarets Cyberdivision i Hvidovre – Er det dig?

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Kickstart din IT-karriere som IT-supporterelev på Flyvestation Aalborg

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Sektionschef til Enterprise Arkitektur i Forsvaret på Østerbro

Djurslands Bank

IT-udvikler