MySQL SELECT WHERE IN增值

时间:2017-02-16 12:45:56

标签: mysql select where where-in

我有一个DB,它包含带位置标识符的单词。例如,以下字符串:

  

快速的棕色狐狸跳过懒狗

位置标识符为:

  1. 快速
  2. 棕色
  3. 福克斯
  4. 跳到
  5. 懒惰
  6. 我想要完成的是我选择一个字符串,其中Fox直接跟随Jumps。我使用以下MySQL语法:

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

    但是,加号声明没有按预期工作。

    我怎么能实现这个目标?

    更新

    Oke,要澄清。这是我的表:

    StringID    Word     Counter     Positions
    
    1           Fox      2           6|35
    
    1           Jumps    4           7|12|36|46
    
    1           Over     3           8|37|41
    

    所以,从这个表格我想要检索位置,其中Over跟随Fox跟随跳转。所以在这个例子中,我希望找到6,7和8作为一对,35,36和37作为一对位置

    我希望这更清楚。 THX

3 个答案:

答案 0 :(得分:1)

试试这个

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

假设您的PositionIdentifier列是INT,那么您可能需要CAST减法结果

答案 1 :(得分:0)

使用positionidentifier + 1作为连接条件在位置表上进行自联接,以获得jumpsfox之后的字符串。我假设您的positions表包含以下3个字段:

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

  • 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'

或者,您也可以使用exists()子查询,如果您不需要来自“跳转”的任何详细信息。记录。

答案 2 :(得分:0)

我试过你的sql看起来它工作正常吗? 除了FROM拼写错误(FORM)这一事实,看起来你想要“AND”代替“OR”而不是你想要的东西。

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

你能澄清一句“加一句话没有按预期工作吗?”?