SQL在表的两个副本之间留下了自我连接与WHERE子句的依赖关系

use*_*003 9 sql outer-join

以下两句话:

hello there
bye!
Run Code Online (Sandbox Code Playgroud)

在表sentence_words中表示:

WORD_ID  SENTENCE_ID    WORD    WORD_NUMBER
10       1              hello   1
11       1              there   2
12       2              bye!    1
Run Code Online (Sandbox Code Playgroud)

我想做一个外连接查询,给我结果:

WORD1      WORD2
hello      there
bye!       NULL
Run Code Online (Sandbox Code Playgroud)

请注意,我可能想在句子的中间开始,所以我不能假设word2有word_number = 2.如果我选择my_start_number = 2那么查询应该给我:

WORD1   WORD2
there   NULL
Run Code Online (Sandbox Code Playgroud)

我试过了:

(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);
Run Code Online (Sandbox Code Playgroud)

如果句子中有两个单词,那只会给我一个结果.我不知道该怎么做并不复杂.

Mat*_*lie 11

word_number + 1要求移到LEFT JOIN.

SELECT
  s1.word word1, s2.word word2
FROM
  sentence_words s1
LEFT JOIN
  sentence_words s2
    ON  s2.sentence_id = s1.sentence_id
    AND s2.word_number = s1.word_number + 1
WHERE
  s1.word_number = my_start_number
Run Code Online (Sandbox Code Playgroud)