Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Schwierige SQL-Abfrage, oder wie muss ich joinen (left...)? (https://www.delphipraxis.net/91834-schwierige-sql-abfrage-oder-wie-muss-ich-joinen-left.html)

stifflersmom 10. Mai 2007 15:37

Datenbank: ABS • Version: 5.13 • Zugriff über: ABS Komponenten

Schwierige SQL-Abfrage, oder wie muss ich joinen (left...)?
 
Ok, die Überschrift ist nicht prickelnd..
Nun mein Problem
Ich habe drei Tabellen:

WORDS
---------------------
WORD_ID INTEGER
WORD VARCHAR
1 der
2 eine
3 niemand
4 peter

DOCUMENT_WORDS
---------------------
DOCUMENT_WORD_ID INTEGER
WORD_ID INTEGER
DOCUMENT_ID INTEGER
1 1 1
2 3 1
3 4 1
4 2 2
4 1 2


DOCUMENTS
---------------------
DOCUMENT_ID INTEGER
DOCUMENT_NAME VARCHAR
1 Diplom1.doc
2 Putzplan.doc
3 Tagebuuch.doc

Wie muss ich jetzt meine Select-Anweisung formulieren,
um die Dokumente anzeigen zu lassen, in denen ALLE Wörter
vorkommen, die meiner Suchanfrage entsprechen?

Als Beispiel will ich jetzt die Dokumente aufgelistet haben,
in denen die Wörter "der" und "eine" vorkommen.
Richtig gut wäre es, wenn ich hier noch formulieren könnte,
welche Wörter NICHT in einem Dokument enthalten sein dürfen.

Ich breche mir hier mit den ganzen left inner... Join-Möglichkeiten die
Finger ab, und komme zu keinem vernünftigen Ergebnis.

Moin

hoika 10. Mai 2007 15:50

Re: Schwierige SQL-Abfrage, oder wie muss ich joinen (left..
 
Hallo,

select distinct(DOCUMENT_NAME )

from DOCUMENTS
join DOCUMENT_WORDS.DOCUMENT_ID = DOCUMENTS.DOCUMENT_ID
join WORDS on WORDS.WORD.ID= DOCUMENT_WORDS.WORD_ID

where (WORDS.WORD='der') or (WORDS.WORD='eine')


zum nicht vorhanden würde ich nen subselect nehmen
siehe meine Posting heute zu "delete mit join"


Heiko

stifflersmom 10. Mai 2007 18:19

Re: Schwierige SQL-Abfrage, oder wie muss ich joinen (left..
 
Tja, die Suche ist auf jeden Fall gelöst:
SQL-Code:
select d.document_name, d.document_id, w.word
from documents as d, document_words as dw
left join words as w on dw.word_id=w.word_id

where d.document_id=dw.document_id
and (w.word='der' or w.word='eine')
Jetzt fehlt nur noch die Ausschlussbedingung.

omata 10. Mai 2007 19:28

Re: Schwierige SQL-Abfrage, oder wie muss ich joinen (left..
 
Hallo stifflersmom,

hier mal mein Vorschlag...

SQL-Code:
SELECT d.document_name, d.document_id, w.word
FROM documents d
INNER JOIN document_words dw
  ON d.document_id = dw.document_id
LEFT JOIN words w
  ON dw.word_id = w.word_id
WHERE w.word    IN ('der', 'eine')
  AND w.word NOT IN ('die', 'das')
Gruss
Thorsten

stifflersmom 11. Mai 2007 13:05

Re: Schwierige SQL-Abfrage, oder wie muss ich joinen (left..
 
Zitat:

Zitat von omata
Hallo stifflersmom,

hier mal mein Vorschlag...

SQL-Code:
SELECT d.document_name, d.document_id, w.word
FROM documents d
INNER JOIN document_words dw
  ON d.document_id = dw.document_id
LEFT JOIN words w
  ON dw.word_id = w.word_id
WHERE w.word    IN ('der', 'eine')
  AND w.word NOT IN ('die', 'das')
Gruss
Thorsten

Nein, die Ausschlussbedingung funktioniert leider nicht

Phoenix 11. Mai 2007 13:32

Re: Schwierige SQL-Abfrage, oder wie muss ich joinen (left..
 
Aufbauend auf dem Vorschlag oben:
SQL-Code:
SELECT d.document_name, d.document_id, w.word
FROM documents d
INNER JOIN document_words dw
  ON d.document_id = dw.document_id
LEFT JOIN words w
  ON dw.word_id = w.word_id
WHERE w.word    IN ('der', 'eine')
AND dw.word_id NOT IN (SELECT word_id FROM words WHERE word IN ('die', 'das'))

Angel4585 11. Mai 2007 13:42

Re: Schwierige SQL-Abfrage, oder wie muss ich joinen (left..
 
SQL-Code:
SELECT d.document_name, d.document_id, w.word
FROM documents d
INNER JOIN document_words dw
  ON d.document_id = dw.document_id
LEFT JOIN words w
  ON dw.word_id = w.word_id
WHERE    (w.word IN ('der', 'eine'))
  AND NOT (w.word IN ('die', 'das'))
das muss eigentlich gehen :gruebel:

stifflersmom 11. Mai 2007 13:42

Re: Schwierige SQL-Abfrage, oder wie muss ich joinen (left..
 
Zitat:

Zitat von Phoenix
Aufbauend auf dem Vorschlag oben:
SQL-Code:
SELECT d.document_name, d.document_id, w.word
FROM documents d
INNER JOIN document_words dw
  ON d.document_id = dw.document_id
LEFT JOIN words w
  ON dw.word_id = w.word_id
WHERE w.word    IN ('der', 'eine')
AND dw.word_id NOT IN (SELECT word_id FROM words WHERE word IN ('die', 'das'))

Nein, funktioniert leider auch nicht

Angel4585 11. Mai 2007 13:44

Re: Schwierige SQL-Abfrage, oder wie muss ich joinen (left..
 
es kommen doch sicher Fehlermeldungen wenn du die Abfragen ausführst, kannst du die mal dazuposten wenn was nciht funktioniert?

stifflersmom 11. Mai 2007 13:44

Re: Schwierige SQL-Abfrage, oder wie muss ich joinen (left..
 
Zitat:

Zitat von stifflersmom
Tja, die Suche ist auf jeden Fall gelöst:
SQL-Code:
select d.document_name, d.document_id, w.word
from documents as d, document_words as dw
left join words as w on dw.word_id=w.word_id

where d.document_id=dw.document_id
and (w.word='der' or w.word='eine')
Jetzt fehlt nur noch die Ausschlussbedingung.

Und da habe ich mich auch zu früh gefreut,
denn es wedren alle Dokumente gefunden in denen
entweder das eine oder das andere Wort vorkommt,
nicht aber das was eigentlich soll, nämlich das,
in dem beide Wörter zu finden sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz