2010-02-19 1 views
1

Je n'ai pas beaucoup d'expérience en écriture SQL alors peut-être c'est une question assez triviale mais maintenant j'ai une requête SQL où j'ai besoin de faire un 'j'aime' sur plusieurs champs, actuellement je fais:La requête SQL pour les champs muliple utilisant l'opérateur like peut-elle être écrite différemment?

select * 
from tableX 
where col1 like '10%' 
    or col2 like '10%' 
    or col3 like '10%' 
    or col4 like '10%' 
    or col5 like '10%' 
    or col6 like '10%' 

Existe-t-il une manière différente, plus simple ou meilleure, d'écrire le SQL?

Merci

+0

@Oded: Il est un programmeur empirique, il doit aller le tester pendant quelques années avant d'être convaincu que cela fonctionne. – Hogan

Répondre

2
select * from tableX where col1 like '10%' 
UNION 
select * from tableX where col2 like '10%' 
UNION 
select * from tableX where col3 like '10%' 
... 

Si vous compariez un col contre plusieurs valeurs, puis il y a d'autres options, telles que

SELECT * 
FROM 
    tableX t1 
    JOIN 
    tableFilter TF ON t1.col LIKE TF.FilterValue 
0

En mieux que tu veux dire plus vite?

Je pense que le suivant pourrait être plus rapide, mais sql pourrait déjà l'optimiser:

select * 
from tableX 
where substring(col1,0,2) = '10' 
    or substring(col2,0,2) = '10' 
    or substring(col3,0,2) = '10' 
    or substring(col4,0,2) = '10' 
    or substring(col5,0,2) = '10' 
    or substring(col6,0,2) = '10' 

beaucoup dépend de ce que vous faites, si vous faites cela beaucoup et chaque colonne commence par un code à deux caractères alors vous pourriez vouloir diviser cette valeur dans sa propre colonne.

+0

La fonction sur la colonne supprimera toute chance d'utilisation de l'index. Le LIKE permettra au moins que (même avec OU) – gbn

+0

@gbn: vous m'avez - je ne sais pas comment il serait possible de faire autre chose qu'une recherche en utilisant un LIKE. Êtes-vous en train de dire qu'il existe un moyen d'interroger un index pour des valeurs de colonne comme x? Ma compréhension d'un indice est qu'il a un ordre et il peut trouver des choses d'une valeur donnée à cette commande. S'il te plaît, éclaire-moi. – Hogan

+0

@Hogan: Comme peut chercher, la sous-chaîne va scanner – gbn

Questions connexes