2017-02-16 48 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

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