MySQL SELECT 递增值
MySQL SELECT WHERE IN Incrementing Value
我有一个数据库,里面有带位置标识符的单词。例如下面的字符串:
The Quick Brown Fox Jumps Over The Lazy Dog
职位标识符为:
- 快速
- 棕色
- 狐狸
- 跳跃
- 结束
- 懒惰
- 狗
我想完成的是 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." 是什么意思吗?
我有一个数据库,里面有带位置标识符的单词。例如下面的字符串:
The Quick Brown Fox Jumps Over The Lazy Dog
职位标识符为:
- 快速
- 棕色
- 狐狸
- 跳跃
- 结束
- 懒惰
- 狗
我想完成的是 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." 是什么意思吗?