AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Schwierige SQL-Abfrage, oder wie muss ich joinen (left...)?
Thema durchsuchen
Ansicht
Themen-Optionen

Schwierige SQL-Abfrage, oder wie muss ich joinen (left...)?

Ein Thema von stifflersmom · begonnen am 10. Mai 2007 · letzter Beitrag vom 11. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
374 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Schwierige SQL-Abfrage, oder wie muss ich joinen (left...)?

  Alt 10. Mai 2007, 15:37
Datenbank: ABS • Version: 5.13 • Zugriff über: ABS Komponenten
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 10. Mai 2007, 15:50
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
Heiko
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
374 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

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

  Alt 10. Mai 2007, 18:19
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='deror w.word='eine')
Jetzt fehlt nur noch die Ausschlussbedingung.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

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

  Alt 10. Mai 2007, 19:28
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
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
374 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

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

  Alt 11. Mai 2007, 13:05
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
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#6

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

  Alt 11. Mai 2007, 13:32
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'))
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#7

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

  Alt 11. Mai 2007, 13:42
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
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
374 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

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

  Alt 11. Mai 2007, 13:42
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
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#9

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

  Alt 11. Mai 2007, 13:44
es kommen doch sicher Fehlermeldungen wenn du die Abfragen ausführst, kannst du die mal dazuposten wenn was nciht funktioniert?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
374 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

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

  Alt 11. Mai 2007, 13:44
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='deror 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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz