Avatar billede gzus_dk Nybegynder
27. august 2002 - 16:56 Der er 5 kommentarer og
1 løsning

Udtræk af Data

Hej

Jeg har et problem omkring udtræk af data fra en database som er følgende.

Jeg har en tabel (document) med følgende indhold :
-----------------------------------
ID - som er unik
refID - en reference id, til et reference objekt
date - dato som dokumentet er oprettet
doctype - typen på dokumentet
-----------------------------------

Hvis man ser overordnet på det har jeg et reference objekt som kan indeholde en eller flere dokumenter, som hver har sin specielle type. Fx. kan en reference indeholde et ordre dokument, og et kviterings dokument. Disse ligger så at sige grupperet via deres refID som naturligvis er den samme, når de tilhører den samme reference.

Nu ønsker jeg at lave en select sætning der giver mig alle de reference ID'er som indeholder et dokument fx. en ordre, men ikke et andet fx. en kvitering. Dvs. jeg vil se om en reference har en ordre men ikke har en kvitering, og dermed udtrække reference ID på dem som ikke indeholder kviteringen.

For at pensle det endnu mere ud. Hvis jeg har 10 referencer, hvor alle 10 på nær nummer 5 kun indeholder et dokument af typen ordre, og nummer fem både indeholder en ordre og en kvitering. Så ønsker jeg at hive reference ID ud på alle nær nummer 5. Hvis fx. reference nummer 11 indeholder noget andet end en ordre, skal der heller ikke tjekkes på den.

Håber i kan forstå problemet, og endnu bedre give mig en løsning eller et hint til hvordan det muligvis kan løses. Det skal siges at det skal laves i så generel SQL som muligt, så ingen specifikke MySQL eller andre funktioner.

På Forhånd Tak

/Morten
Avatar billede hansk Nybegynder
28. august 2002 - 08:18 #1
Prøv denne SQL, den er så standard som sådan noget kan være:

Hvis tabellen hedder Document, og doctype indeholder "ORD" eller "KVI"

SELECT Document.ID, Document.refID, Document.docType
FROM Document
WHERE Document.docType="ORD" and Document.ID Not In
(SELECT ID from Document where docType="KVI")
Avatar billede gzus_dk Nybegynder
28. august 2002 - 08:56 #2
Der er bare et lille problem, at bl.a. MySQL ikke understøtter subselects :/
Avatar billede hansk Nybegynder
28. august 2002 - 09:54 #3
Du fik en generel løsning, som du specifikt bad om. Du frabad dig netop MySQL's kringlekroge.
Nå, men subselect bliver implementeret i version 4.1, og indtil dette sker kan du bruge en temporær tabel, hvor du lagrer resultatet fra subselecten, hvorefter du kan fikse dit spørgsmål via en join.
Avatar billede gzus_dk Nybegynder
28. august 2002 - 09:57 #4
Kan du give mig et eksempel på dette ?
Avatar billede hansk Nybegynder
28. august 2002 - 10:14 #5
Insert sætningen laver du sådan:

INSERT INTO DocumentTemp (ID) SELECT Document.ID FROM Document WHERE
Document.ID = "KVI"

og din join laver du sådan:

SELECT Document.ID, Document.refID, Document.docType
FROM Document LEFT JOIN DocumentTemp ON Document.ID = DocumentTemp.ID
WHERE Document.docType="ORD" and DocumentTemp.ID is null
Avatar billede gzus_dk Nybegynder
28. august 2002 - 11:07 #6
Måden at gøre det på var rigtig, men der skulle lidt tilpasning til. Sådan blev resultatet :

INSERT INTO temp_doc SELECT * from Document where doctype = "receipt";

INSERT INTO temp_doc_found SELECT document.*
FROM document
LEFT JOIN temp_doc ON document.refID = temp_doc.refID
WHERE document.doctype="order" AND temp_doc.refID is null;

Tak for hjælpen

/Morten
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