2010-10-14 11 views
7

tengo que seleccionar todos los registros en los que:¿Cómo escribir una declaración SQL para usar "LIKE" para nueve valores diferentes?

where FIELD2 like '%value21%' 
or FIELD2 like '%value22%' 
or FIELD2 like '%value23%' 
-- repeat up to 
or FIELD2 like '%value29%' 

Aquí, value21, ..., value29 son parámetros que el usuario puede poner en un formulario antes de enviar la consulta. Son códigos numéricos (no posteriores) y FIELD2 es una columna de base de datos que contiene un valor de cadena.

¿Cuál es la forma más compacta para escribir mi consulta SQL?

Nota: Esto está relacionado con an earlier question, pero esto necesita LIKE en lugar de igualar.

+1

Nos sería de gran ayuda si usted nos dice lo que es 'value21..value29' – Sathya

+1

Y: ¿qué base de datos? – Arjan

+0

@Arjan, tienes razón: he actualizado mi pregunta. Ahora es muy difícil para mí explicar la estructura de la base de datos. ¿Tienes alguna pregunta específica? –

Respuesta

16

me temo que está pegado con:

WHERE (FIELD2 LIKE '%value21' OR 
     FIELD2 LIKE '%value22' OR 
     FIELD2 LIKE '%value23' ...) 

al menos en SQL estándar (su motor en particular puede ofrecer alguna forma de indexación de texto completo que ayude).

Una consulta como esta a menudo indica un problema de normalización en el diseño de su base de datos con múltiples valores almacenados en un solo valor de campo. Si eso es cierto en su caso y tiene algún grado de control sobre el esquema de la base de datos, le aconsejo que solucione el problema lo antes posible. De lo contrario, verifique su cobertura médica para asegurarse de que cubre la psicosis inducida por SQL; esto puede volverlo loco.

+4

+1 para "Aconsejo solucionar el problema lo antes posible". Un buen consejo – NotMe

+0

¿Hay problemas que no recomiendas solucionar? – Robus

+2

@Robus: cualquiera donde la solución es más costosa que el problema continuo. –

1

Una manera:

select Field1, Field2 from Table where Field2 like '%val%' 
UNION 
select Field1, Field2 from Table where Field2 like '%val2%' 
UNION 
select Field1, Field2 from Table where Field2 like '%val2%' 

etc.

+0

No UNION TODO, creo, ya que algunas filas pueden coincidir con varias condiciones diferentes. Creo que una UNIÓN "regular" siempre que la PK esté incluida en la lista de campos seleccionados. –

+0

@Larry: ajustado en consecuencia. Gracias – NotMe

Cuestiones relacionadas