我有一个DB,它包含带位置标识符的单词。例如,以下字符串:
快速的棕色狐狸跳过懒狗
位置标识符为:
我想要完成的是我选择一个字符串,其中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
答案 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作为连接条件在位置表上进行自联接,以获得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()
子查询,如果您不需要来自“跳转”的任何详细信息。记录。
答案 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')
你能澄清一句“加一句话没有按预期工作吗?”?