28. maj 2002 - 17:15Der 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?
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)
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.
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..
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 :-)
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 :-)
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.