2014-06-09 76 views
0

的列值的字符串我試圖search一個String在我的表.The值的列存儲在 列在此格式搜索SQLite中

Column Values

我的搜索字符串如上相似。 i.e:逗號分隔String

我的查詢是要找出搜索字符串中是否有任何值是我的列或不是。

事情我已經嘗試:

  1. 使用LikeLike做它。但是它匹配單個值,即3搜索字符串值,我必須讓15像條件(昂貴的大表)

    SELECT * fromWHEREmycolLIKE '設爲myVal,%' ormycolLIKE '%,myval,%' ormycolorLIKE '%,myval' 使用instr功能

  2. instr字符串,但只有第一次出現匹配。

    e.g:select * from A where instr ('123' ,'12')

  3. 使用In:在String。但內這DONOT search單獨匹配的值。

  4. 我從文檔Here

所以我的問題是有沒有辦法試圖像函數贊(X,Y),而不是單獨搜索我searchstring列使用Like運營商或In功能。我可以搜索我的價值觀值的InAnyquery類似組合(Sqlite不支持)function確實在其他Db

i.eselect * from A where Any('my search string') in ('my column value')

任何回答或評論在HIGHLY Appreciated.Hoping答覆。

+0

爲什麼您的應用程序需要多個字符串才能合併到一個值中?你能改變數據庫結構嗎? –

+0

@CL。其實這些是一些Ids我想找到它是否出現在我的表列中,並相應地執行一些動作,如果匹配。 – nitesh

回答

2

您有問題,因爲您的數據庫未正確標準化。

具有多個搜索的ID對於每個MyTable行,每行中的創建可以具有多個行的第二表,與一個搜索ID:

CREATE TABLE MyTable (
    MyTableID INTEGER PRIMARY KEY, 
    [...] 
); 
CREATE TABLE MyTableSearchIDs (
    MyTableID INTEGER REFERENCES MyTable(MyTableID), 
    SearchID INTEGER -- or TEXT or whatever 
); 

要搜索MyTable行,第一搜索它的ID :

SELECT * 
FROM MyTable 
WHERE MyTableID IN (SELECT MyTableID 
        FROM MyTableSearchIDs 
        WHERE SearchID = 'myvalue') 

這也可以用做一個連接:

SELECT MyTable.* 
FROM MyTable 
JOIN MyTableSearchIDs USING (MyTableID) 
WHERE MyTableSearchIDs.SearchID = 'myvalue'