2017-02-16 112 views
-2

我有一个数据库,它包含具有位置标识符的单词。例如下面的字符串:MySQL选择哪里在增量值

敏捷的棕色狐狸跳过了懒狗

的位置标志是:

  1. 快速
  2. 布朗
  3. Fox
  4. 跳转

我想完成的是,我选择其中福克斯为直接跳转跟着一个字符串。我使用以下MySQL语法:

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

但是,加号语句未按预期工作。

我怎么能做到这一点?

更新:

奥凯,以clearify。这是我的表:

 
StringID Word  Counter  Positions 

1   Fox  2   6|35 

1   Jumps 4   7|12|36|46 

1   Over  3   8|37|41 

所以,从这个TABEL我想找回其中超过如下跟随狐狸跳过的位置。所以在这个例子中,我想检索6,7和8作为一对,35,36和37作为一对位置

我希望这更清楚。 THX

+2

请参阅http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

+0

感谢您的回答,但是这不是我正在寻找的 –

+0

哦,它绝对是。 – Strawberry

回答

1

给它这样的

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

一试假设你PositionIdentifier列是一个INT otherwhise你可能要投减法结果

+0

谢谢你,我尝试了你的方法,并进行了一些调整,我能够使它工作,非常感谢 –

0

请在使用positionidentifier位置表自联接+1作为连接条件来获取jumps后跟fox的字符串。我假设你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()子查询。

+0

嗯,我还想拥有第二个词的PositionIdentifier。如果我不想找狐狸跳,但狐狸跳过这个网吧怎么办?查询会快速增长,并且我需要返回所有PositionIdentifiers –

+0

@TVAvanHesteren,那么您应该在您的问题中描述这些条件,而不是在随后对答案进行评论。顺便说一句,只需添加p2.PositionIdentifier到选择列表,你有你的愿望。 – Shadow

+0

是的,我明白这一点。是否也可以让SQL从|中选择位置符号分隔字符串?例如:职位是:| 6 | 58 | 74 | 97 | ? –

0

我试过你的sql,它看起来好像工作正常? 除了拼写错误(FORM)的事实,它看起来像你想要的是“AND”而不是“OR”。

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

请问您是否可以说明您的意思是“加一声明未按预期工作。”?

+0

字和位置存储在不同的表中,见上面更新 –