select Abfrage Problem

matze1234

Grünschnabel
Hallo,

ich verusche jetzt schon seit mehreren Tagen das folgende Problem zu
lösen. Zuerst sei gesagt, ich bin oracle/sql Anfänger. Ich habe zur Datenbank und sql
Bearbeitung den "Quest-Toad" zur Verfügung. Schonmal Danke im voraus.

Also ich bin im Moment bei folgender Abfrage:

select vision2003.telocation.LOCATION, vision2003.telocation.IDENTIFIER, vision2003.dr$i_telocation_location$i.TOKEN_TEXT
from vision2003.telocation , vision2003.dr$i_telocation_location$i
where (vision2003.telocation.location = vision2003.dr$i_telocation_location$i.token_text(+))
and contains (location, 'Diabetes and Mellitus')>0;


Nur leider werden mir in der TOKEN_TEXT Spalte keine Werte wiedergegeben. Die beiden Tabellen sind, soweit ich das gesehen habe, nur über den Index "Table Owner" verknüpft, der bei beiden Vision2003_Dev ist.
Wenn wenigstens in beiden Tabellen eine gleiche Spalte vorkommen würde, könnte man diese ja einfach verbinden...

Die Spalten location und token_text haben nicht gleiche Inhalte. In Token_text stehen Worte wie "Nord" und wenn man dies in einem contains in dem location suchen lässt, findet er das Nord auf der zu dem identifier gehörenden Seite.
Was ich jetzt möchte ist das Token_Text und den Identifier und location auf einer Seite ausgeben, so dass man klar sehen kann welches Wort zu welcher Seite gehört.

Doch bei der where Bedingung wo die beiden Tabellen verglichen werden, fehlt noch der entscheidene Schritt, damit er dem IDENTIFEIR/LOCATION den TOKEN_TEXT zuweisen kann.


ich weiß im Moment nicht wie man das anders machen kann
 
Erstmal einigermaßen lesbarer SQL Code. Identisch mit deinem, aber einfach nur besser lesbar.

SQL:
SELECT t.location, t.identifier, d.token_text
FROM telocation t , dr$i_telocation_location$i d
WHERE (t.location = d.token_text(+))
AND CONTAINS (location, 'Diabetes and Mellitus')>0;

Poste mal ein wenig Inhalt deiner Tabellen, ich kann mir das ganze allein durch deine Beschreibung nur schwer vorstellen.
 
Leider verstehe ich nicht so ganz was du willst. Im Text schreibst du die Spalten location und token_text enthalten unterschiedliche Werte, im Statement joinst du aber die beiden Spalten ?!

So wie es aussieht nutzt du OracleText sonst würde das CONTAINS nicht funktionieren. Es wäre also wirklich sinnvoll mal die Tabellenbeschreibung mit Spalten und Datentypen zu posten. Ausserdem wäre es interessant auf welcher Spalte z.B. der CTXSYS Index, also der Fulltext Index liegt.

Kann das Toad ? ;-)
SQL*Plus Rulez! (sorry, musste sein)
 
Ich hab die beiden Spalten mit join verbunden weil ich mir nicht anders zu helfen wußte.
Aber wie du schon richtig erkannt hast wurde oracle intermediatext benutzt um die Tabelle zu füllen. Ich habe den index aber nicht programmiert, sondern darf ihn jetzt nur auswerten.


Die Indizes wurden nach dem Schema angelegt
create index i_telocation_location on telocation(location) indextype is
ctxsys.context parameters(!datastore URL_PREF');

die Spalten der Tabelle dr$i_telocation_location$i sind Token_text(varchar2), token_type(Number), token_frist(Number), token_last (Number). token_count(Number) und token_info(BLOB)

die Spalten der Tabelle telocation sind Identifier(Number), ID(Number), Location (Varchar2) und Changedate(Date)

doch es gibt keine direkte Verbindung zwischen den Tabellen. Halt nur irgendwie über den index.
 
Ich habe schonmal gesagt: Poste ein wenig Inhalt deiner Tabellen, ohne Daten kann ich mir das ganze schwer vorstellen und werde daher auch nicht drüber nachdenken.
 
Versuch mal sowas:

SQL:
SELECT t.location, t.identifier, d.token_text
FROM telocation t , dr$i_telocation_location$i d
WHERE t.location LIKE CONCAT(CONCAT('%',d.token_text),'%');
 
Erstmal Danke für die Antwort.
Wenn ich deine Abfrage eingebe zeigt er mir leider in jeder Zeile die gleibe Antwort an.
Will ich die Ausgabe durchzählen oder nicht nur die ersten Einträge sehen stürzt das DIng ab. Ich weiß nicht ob es an der großen Anzahl der ganzen Einträge liegt?

Das hatte ich auch schon ähnlich als ich das probiert habe:

select location, identifier, token_text from vision2003.telocation, vision2003.dr$i_telocation_location$i;

wo ich dann zwar die einzelnen Token_text Einträge bekam(300000 Stück),aber in location + identifier stand dann immer der gleiche Eintrag.



mit dieser Abfrage zeigt er mir die location + identifier an( ca.6000 Einträge) wobei jeder identifier 4 mal auftaucht, mit 4 mal der gleichen location. Also doppelte Einträge kommen vor-> bei 'Knochen' das ganze sogar als 18 ma zu jeder Adresse (insgesamt 28728 Einträge).

select location, identifier from vision2003.telocation, vision2003.dr$i_telocation_location$i where token_text= 'BRONCHOGENIC';


es soll wohl nicht sein....
 
Zurück