在表中搜索搜索短语存储在两个单独的行中

时间:2014-03-19 13:34:25

标签: sql search

我有一张表格,如下表:

  ID |   Order   | Creator_ID | text
-----+-----------+------------+------------------------
  1  |     1     |    3       | first part
  2  |     2     |    3       | second part
  3  |     5     |    1       | first part
  4  |     7     |    1       | second part
  5  |     12    |    2       | first part
  6  |     13    |    1       | second part

我有一个完整的句子字符串,如first part second part,我想知道这个句子是否存在于表格中。我不知道这句话应该在哪里拆分,以便制作两个句子,比如数据库中的句子。我想这个问题可以使用LIKE '%...' OR LIKE '...%' SQL命令解决,但这次搜索还有更多条件。

我还有两个搜索条件,1。此查询返回的两行应该具有相同的Creator_ID s 2. Order句子第一部分的列应该具有{{1}第二句减去1。

一个例子: 我在表中搜索Order字符串的存在。

  1. 第1行和第2行可以使这句话更新。它们具有相同的first part second part,第一部分的Creator_ID为1,第二部分的Order为2,1 = 2 - 1.它们应出现在结果中。
  2. 第3行和第4行可以使这句话更上一层楼。它们具有相同的Order 它们不会连续Creator_ID s。
  3. 第5行和第6行也可以使这句话更新但是他们没有相同的Order s
  4. 第1行和第4行或第3行和第6行等其他组合在Creator_IDCreator_ID测试时失败,因此此SQL查询只应返回第一行和第二行。

    应该如何编写此SQL查询?

    • 我无法更改此表的结构。
    • 此表存储在sqlite数据库中,我使用Django(如果这些信息很重要!)

1 个答案:

答案 0 :(得分:2)

您可以使用自联接来识别符合条件的行对:

select s1.id as id1, s2.id as id2
from sentences s1 join
     sentences s2
     on s1.creator_id = s2.creator_id and
        s1.order = s2.order - 1
where s1.text like '%first part%' and
      s2.text like '%second part%';