[Sql]Lastige query

Pagina: 1
Acties:

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Ok database sqlserver 2000, ik heb volgende opdracht:
Een database heeft volgende tabellen (die van belang zijn ;) )

Documenttable met een documentid
Een document-trefwoordtable, deze table bevat documentid,trefwoordid

Daarnaast zelde principe maar dan met dossiers

Een table met Dossierinfo, met daarin een dossierid
Een table met Dossiertrefwoorden, dus dossierid,trefwoordid

Nu is de truc om aan hand van dossierid de bijbehorende documenten te vinden.
Nu is de grap dat een document gevonden moet worden als ALLE trefwoorden ook gelden dus voorbeed: een document heeft trerwoord id 1,6,9

Als een dossier trefwoord 1,9 heeft dan is het document gevonden.

heeft dossier trefwoord 1,4,53,5 dan is het GEEN hit, immers 4,53,5 heeft dit document niet.

Zelf zit ik te denken om te werken met een temptable met daarin eerst de trefwoordid's van het dossier, vandaar uit iets met een cursor er door heen en dan de documenten wegstrepen :?

Iemand suggesties?

Verwijderd

Je kunt ook gewoon van het aantal gevonden/goede keywords per dossier uitgaan. Is dit aantal keywords gelijk aan het aantal gezochte keywords, dan is zitten alle gezochte keywords in het dossier. Temptables lijken me niet zo'n denderend idee.
Ik ben niet zo'n db-wizzard, maar het lijkt me sterk dat google of een mooi boek over databases je niet verder kan helpen met het zoeken naar een effeciente zoekmethode.

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 16:48

The Eagle

I wear my sunglasses at night

Volgens mij kan dat met een Outer Join. Maar volgende keer moet je je huiswerk zelf maar doen!!

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
The_Eagle schreef op 27 september 2002 @ 14:03:
Volgens mij kan dat met een Outer Join. Maar volgende keer moet je je huiswerk zelf maar doen!!
:Z dit is geen huiswerk aap, ik probeer hier een zinvolle discussie op te starten dan wel te kijken of mensen creatieve ideeen hebben, daarnaast is een outer join hier niet van toepassing aangezien het hier om een and conditie gaat en niet om een OR.

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

The_Eagle schreef op 27 september 2002 @ 14:03:
Volgens mij kan dat met een Outer Join. Maar volgende keer moet je je huiswerk zelf maar doen!!

en de volgende keer moet jij je er niet meer mee bemoeien als je niet weet waar het over gaat.
dank je

Doet iets met Cloud (MS/IBM)


  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 16:48

The Eagle

I wear my sunglasses at night

Mijn excuses; heb te vroeg mij oordeel klaar. Zal niet meer voorkomen

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
The_Eagle schreef op 27 september 2002 @ 14:18:
Mijn excuses; heb te vroeg mij oordeel klaar. Zal niet meer voorkomen
Aanvaard

  • Morpheus_at_work
  • Registratie: December 2000
  • Laatst online: 12:55
wil je een stuk namaken in access dan kunnen we is wat gaan uitproberen (ja ik ben lui om zelf wat te gaan nabouwen)

Canon R6 MARK III, 35mm 1.4 VCM, 50mm 1.4 VCM , 85mm 1.4 VCM , 17-35mm 1.8, 28-70 1.8 , 24-105 1.8 70-200 f2.8


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

is het niet een beetje dubbel om voor dossiers EN de documenten trefwoorden op te slaan? De trefwoorden gelden voor beiden dus staan dubbel in de DB..

design-foutje ipv query-probleempje?

[edit]..

Ik zie nu dat je documenten aan de dossiers hebt gelinked a.d.h.v. de trefwoorden.. vage boel.. waarom in hemelsnaam die aanpak??

Of snap ik gewoon niet veel van je verhaaltje? :)

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Don't ask me, ik zou het ook zeker in een vaste tabel opslaan, probleem is echter dat wij een stuk op een applicatie moeten bouwen, probleem is ook dat er verschillende partijen op de db werken.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:54

Crazy D

I think we should take a look.

Ik heb een soortgelijk probleem opgelost door eerst alle potentiele kandidaten (:P) in een temptable te stoppen, en daarna die gegevens eruit te halen die aan alle criteria voldoen.
Het ging in miln geval om artikelen waaraan een zooi toepassingen hangen, die weer een waarde hebben om aan te geven hoe goed geschikt het artikel voor die toepassing is. In de interface moet de gebruiker d.m.v. checkboxes aangeven welke toepassingen het artikel geschikt voor moet zijn.
Als 1e haal ik alle artikelid's op met een normale in(), en een count van hoeveel toepassingen er gevonden zijn voor dat artikelid, en daarna is het natuurlijk makkelijk om dan weer die artikelen op te halen waarbij die count gelijk is aan het aantal opgegeven criteria.
(naja zo ongeveer dan, het is wel weer echt vrijdagmiddag :z)

Exact expert nodig?


  • damanseb
  • Registratie: Maart 2002
  • Laatst online: 24-07-2025
Kan je dit niet met een tussen oplossing aanpakken.
Ik weet niet op wat voorn platform je werkt maar,
als je alle trefwoord ids gevonden hebt voor een document en deze in een array plaatst kun je toch zo met deze array door alle trefwoord ids van de dossiers lopen?

Moet wel toegeven dat het ontwerp van de database niet echt doordacht is.

Volgens mij kan dit nooit met 1 enkele SQL string omdat je in feitte 2 querys nodig hebt en deze niet kunt nesten.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Ook maar even een poging van mij :). Ik heb voor het gemak het een en ander een beetje afgekort. En @dossierid is een parameter, die je nog op een of andere manier moet vullen.
code:
1
2
3
4
5
6
7
8
SELECT  doc.documentid
FROM    Document doc
WHERE   doc.documentid NOT IN ( SELECT  doct.documentid
                FROM    DocumentTref doct
                LEFT JOIN DossierTref dost ON dost.trefwoordid = doct.trefwoordid
                                AND dost.dossierid = @dossierid
                WHERE   dost.trefwoordid IS NULL
                )

De bedoeling van de subquery is om alle document-trefwoorden op te zoeken. Vervolgens zoek bij de gevonden document-trefwoorden alle dossier-trefwoorden op. Als er één trefwoord niet voorkomt bij dossier-trefwoord, zal er een dost.trefwoordid NULL worden. Door middel van de NOT IN zal dit document dus niet terug te vinden zijn in de resultset.

Ik heb het niet getest, maar hopelijk is het voldoende.

Never underestimate the power of

Pagina: 1