2014-06-09 3 views
0

Je suis en train de search une String dans la colonne de ma table valeurs .Les sont stockées dans colonne dans ce formatChaîne de recherche en valeur de la colonne de SQLite

Column Values

Ma Chaîne de recherche est similaire comme ci-dessus. i.e: séparés par des virgules String

Ma requête est de savoir si une valeur dans la chaîne de recherche est présent est ma colonne ou non.

choses que j'ai essayé:

  1. utilisant Like: Like it.but-t-elle correspond à des valeurs individuelles-à-dire pour les trois valeurs de chaîne de recherche que je dois faire 15 comme condition (coûteux pour une grande table)

    SELECT * from A WHEREmycolLIKE 'myval,%' ormycolLIKE '%, myval,%' ormycolorLIKE '%, myval'

  2. en utilisant instr fonction: instr correspond à la chaîne, mais seulement la première occurrence.

    par exemple: select * from A where instr ('123' ,'12')

  3. utilisant In: Ce donot search dans le String .Mais correspond aux valeurs individuellement.

  4. J'ai essayé comme des fonctions comme (X, Y) de docs Here

Donc, ma question est-il un moyen, plutôt qu'individuellement chercher mon searchstring dans la colonne à l'aide Like opérateur ou In fonction . Je pourrais chercher mes valeurs en valeurs combinaison unique comme query quelque chose de In et Any (non pris en charge dans Sqlite) function fait dans d'autres Db

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

Toute réponse ou commentaire est Appreciated.Hoping HAUTEMENT de réponse.

+0

Pourquoi votre application nécessite-t-elle la fusion de plusieurs chaînes en une seule valeur? Pouvez-vous changer la structure de la base de données? –

+0

@CL. En fait, ce sont des Ids que je veux trouver si elle est présente dans la colonne Mon tableau et en conséquence effectuer certaines actions si Matched. – nitesh

Répondre

2

Vous avez des problèmes car votre base de données n'est pas correctement normalisée.

d'avoir plusieurs identifiants de recherche pour chaque MyTable rangée, créer une seconde table qui peut avoir plusieurs rangées, avec une ID de recherche dans chaque ligne:

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

Pour rechercher un MyTable rangée, rechercher son ID première :

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

La même chose peut être fait avec une jointure:

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