SQL-Links self-join mit WHERE-Klausel Abhängigkeiten zwischen den zwei Kopien der Tabelle
Den folgenden zwei Sätze:
hello there
bye!
vertreten sind in der Tabelle sentence_words von:
WORD_ID SENTENCE_ID WORD WORD_NUMBER
10 1 hello 1
11 1 there 2
12 2 bye! 1
Ich wollen einer outer-join-Abfrage, die mir die Ergebnisse:
WORD1 WORD2
hello there
bye! NULL
Beachten Sie, dass ich wollen kann, beginnen Sie in der Mitte des Satzes, so kann ich nicht davon ausgehen, dass wort2 hat word_number = 2. Wenn ich wählen my_start_number = 2 ist, dann ist die Abfrage sollte mir:
WORD1 WORD2
there NULL
Habe ich versucht:
(my_start_number = 1)
select s1.word word1, s2.word word2
from sentence_words s1
left join sentence_words s2
on s1.sentence_id = s2.sentence_id
where s1.word_number = my_start_number
and (s2.word_number = s1.word_number +1 or s2.word_number is null);
Dass nur gibt mir ein Ergebnis, wenn zwei Wörter in einem Satz. Ich bin mir nicht sicher, was zu tun ist, der ist nicht Weise kompliziert.
- Was mit mssql, mysql, oracel?
- Sind Sie versuchen, neu zu erstellen den Satz oder sind Sie einfach nur interessiert an Rückkehr paar Worte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bewegen Sie den
word_number + 1
Anforderung in derLEFT JOIN
.Dems Antwort ist absolut richtig. Ich beschlossen, schreiben Sie diese Antwort, den Grund zu erklären, dass Ihre ursprüngliche Lösung nicht funktioniert. Dies ist, weil Sie versuchen, zu filtern, das folgende ResultSet von der linken outter join (zeigt alle Spalten, mit einigen Namen abgekürzt fit):
Nun, werfen Sie einen Blick auf Ihre where-Klausel:
... und es sollte relativ leicht zu sehen, warum es nicht funktioniert. Zum Beispiel
s2.word_number
ist nieNULL
.