Tabelle mit sich selber joinen?

Hallo,

ich habe eine Tabelle mit den für mich relevanten Feldern
recno_doc, key, value

nun muss ich eine Abfrage machen, die bis zu 5 bedingungen nach key und value durchsucht

also z.b. soll KEY=‚A‘ VALUE=‚B‘ und KEY=‚C‘ VALUE=‚D‘ sein und das maximal 5 stück

wie mache ich das am geschicktesten?

In der Tabelle sind ca. 17000 Datensätze drin, es könnten auch noch wesentlich mehr sein.

Ich habe mir mal eine View im Oracle definiert:

CREATE OR REPLACE VIEW WI\_TEST ( KEY1, 
VALUE1, KEY2, VALUE2, KEY3, 
VALUE3, KEY4, VALUE4, KEY5, 
VALUE5 ) AS SELECT 
 KEY1.KEY, KEY1.VALUE, 
 KEY2.KEY, KEY2.VALUE, 
 KEY3.KEY, KEY3.VALUE, 
 KEY4.KEY, KEY4.VALUE, 
 KEY5.KEY, KEY5.VALUE 
FROM 
 DOC\_KEY\_TAB KEY1, 
 DOC\_KEY\_TAB KEY2, 
 DOC\_KEY\_TAB KEY3, 
 DOC\_KEY\_TAB KEY4, 
 DOC\_KEY\_TAB KEY5 
WHERE 
 KEY1.RECNO\_DOC = KEY2.RECNO\_DOC AND 
 KEY1.RECNO\_DOC = KEY3.RECNO\_DOC AND 
 KEY1.RECNO\_DOC = KEY4.RECNO\_DOC AND 
 KEY1.RECNO\_DOC = KEY5.RECNO\_DOC

Allerdings habe ich das Problem, wenn ich dann nicht wirklich alle 5 KEY und VALUE Felder abfrage, sondern z.b. nur 3 oder 4 hängt sich das Ding ewig auf… wie kann ich denn das irgendwie vernünftig realisieren?

MfG Bruno

Allerdings habe ich das Problem, wenn ich dann nicht wirklich
alle 5 KEY und VALUE Felder abfrage, sondern z.b. nur 3 oder 4
hängt sich das Ding ewig auf… wie kann ich denn das
irgendwie vernünftig realisieren?

…wundert mich nicht, denn wenn Du nur 4 Keys abfragst, machst Du einen kartesischen Produkt zwischen der Tabelle und dem gejointen Rest, machst Du das mit 3en, hast Du gleich 2 kartesische Produkte - bei 17000 Datensätzen ginge jede Datenbank in die Knie.
Die Lösung ist, die nicht benötigten Keys von der FROM-Klausel auszulassen. Am besten generierst Du Dein SQL-Statement dynamisch.

Gruß

J.

OK werd ich wohl machen,
ich ruf es eh aus Java auf… ich will nur soviel wie möglich in die Datenbank verlagern, damit man leicht Anpassungen machen kann, weil ich mir nicht so hundertprozentig sicher ist ob das alles richtig ist

aber dürfte in diesem Fall egal sein

Danke
Bruno

ich will nur soviel wie möglich
in die Datenbank verlagern, damit man leicht Anpassungen
machen kann, weil ich mir nicht so hundertprozentig sicher ist
ob das alles richtig ist

Auch das kannst Du tun: packe es in eine PL/SQL-Prozedur, die das Statement baut und einen Cursor zurückgibt; von Java aus sieht das genau so aus wie die Ergebnismenge einer SQL-Abfrage (hier im Forum war mal gepostet worden, wie das geht, stammte das nicht sogar von Dir?)

Gruß

J.