MySQL SELECT 递增值

MySQL SELECT WHERE IN Incrementing Value

我有一个数据库,里面有带位置标识符的单词。例如下面的字符串:

The Quick Brown Fox Jumps Over The Lazy Dog

职位标识符为:

  1. 快速
  2. 棕色
  3. 狐狸
  4. 跳跃
  5. 结束
  6. 懒惰

我想完成的是 select 一个字符串,其中 Fox 后面直接跟 Jumps。我使用以下 MySQL 语法:

SELECT PositionIdentifier 
FROM TableName 
WHERE Word='Fox' 
   OR PositionIdentifier + 1 IN 
       (SELECT PositionIdentifier 
        FORM TableName 
        WHERE Word='Jumps'
       )

但是,加一语句没有按预期工作。

我怎样才能做到这一点?

更新:

好的,澄清一下。这是我的 table:

StringID    Word     Counter     Positions

1           Fox      2           6|35

1           Jumps    4           7|12|36|46

1           Over     3           8|37|41

所以,我想从这个表格中检索 Over 跟随 Jumps 和 Fox 之后的位置。所以在这个例子中,我想检索 6,7 和 8 作为一对,35、36 和 37 作为一对位置

我希望这更清楚。谢谢

像这样试一试

SELECT PositionIdentifier 
FROM TableName 
WHERE Word='Fox' 
   AND PositionIdentifier IN
       (SELECT (PositionIdentifier -1 ) AS PrevPosID
        FROM TableName 
        WHERE Word='Jumps'
       )

假设您的 PositionIdentifier 列是一个 INT,否则您可能必须对减法结果进行 CAST

使用 positionidentifier+1 作为连接条件在位置 table 上执行 self-join 以获得 jumps 跟在 fox 之后的字符串。我假设您的 positions table 具有以下 3 个字段:

  • string_id:包含单词的字符串的标识符。具有字符串的公共标识符的单词。如果您只是在 PositionIdentifier 字段上加入,那么您的结果可能不正确,因为多个字符串可能包含这 2 个词。

  • PositionIdentifier:标识单词在字符串中的位置

  • 单词:实际单词

我将使用以下查询:

select p1.string_id, p1.PositionIdentifier
from positions p1
inner join positions p2 on p1.string_id=p2.string_id and p1.PositionIdentifier+1=p2.PositionIdentifier
where p1.Word='Fox' and p2.Word='Jumps'

或者,如果您不需要 'jumps' 记录中的任何详细信息,您也可以使用 exists() 子查询。

我试过你的 sql 看起来它工作正常? 除了 FROM 拼写错误 (FORM) 的事实之外,看起来您想要 "AND" 而不是 "OR" 来满足您的需求。

SELECT PositionIdentifier FROM TableName WHERE Word='Fox' OR PositionIdentifier+1 IN (SELECT PositionIdentifier FROM TableName WHERE Word='Jumps')

你能解释一下你所说的 "the plus one statement is not working as expected." 是什么意思吗?