2010-03-22 5 views
0

j'ai un champ varchar avec le contenu comme ceux-ci:trouver des éléments d'un varchar dans un autre varchar

a,b,c,d 
e,d,a,c 
b,q,d,e 

je dois faire une requête sélectionner uniquement les lignes avec le champ qui a des éléments est égal à une entrée chaîne.

ex entrée: c, a

lignes sélectionnées:

a,b,c,d 
e,d,a,c 

est possible sans utiliser le OU (comme champ '% a%' OR champ like '% c%')?

grâce

+1

semble que vous avez besoin d'un ET ici pas OU, im curieux de savoir pourquoi pas de toute façon? – medopal

+0

Je suis d'accord avec medopal - vous êtes un échantillon n'est pas très bon, les deux lignes contiennent les deux caractères. Quoi qu'il en soit, quelqu'un n'a pas normalisé cette base de données ... – Kobi

Répondre

2

Oui, vous pouvez utiliser ...

WHERE 
    myField LIKE '%a%' AND myField LIKE '%c%' 

Cependant, cela ne semble que vous avez un champ méchant dans votre SQL.

Normalement, vous devez utiliser un lien table pour définir ce type d'information:

Table1 
    id 
    otherdata... 

Table2 
    id 
    letter 

LinkTable 
    Table1Id 
    Table2Id 

Donc LinkTable vous auriez de nombreuses entrées qui pointent vos dossiers. Ainsi, au lieu de stocker « a, b, c, d » dans un domaine, vous avez quatre enregistrements de liens:

Table1Id Table2Id 
1   1 (a) 
1   2 (b) 
1   3 (c) 
1   4 (d) 
0

Oui, mais vous avez besoin d'une astuce: Créer une deuxième colonne qui contient la même valeur, mais triée:

a,b,c,d 
a,c,d,e 
b,d,e,q 

maintenant, vous pouvez interroger pour %a%c%

Cela ne fonctionnera pas si la chaîne de requête peut être une sous-chaîne d'une valeur non désirée. Si tel est le cas, vous avez besoin des citations:

"a","b","c","d" 
"a","c","d","e" 
"b","d","e","q" 

et requête pour %"a"%"c"%