2010-10-14 6 views
7

devo selezionare tutti i record in cui:Come scrivere un'istruzione SQL per utilizzare "LIKE" per nove valori diversi?

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

Qui, value21, ..., value29 sono parametri che l'utente può mettere in una forma prima di inviare la query. Sono codici numerici (non successivi) e FIELD2 è una colonna del database che contiene un valore stringa.

Qual è il modulo più compatto per scrivere la mia query SQL?

Nota: questo è relativo a an earlier question, ma questo ha bisogno di LIKE piuttosto che uguale.

+1

Ci aiuterebbe immensamente se ci dicono che cosa 'value21..value29' è – Sathya

+1

E: che cosa database? – Arjan

+0

@Arjan, hai ragione: ho aggiornato la mia domanda. È troppo difficile per me ora spiegare la struttura del database. Hai qualche domanda specifica? –

risposta

16

ho paura sei bloccato con:

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

almeno in standard SQL (il vostro motore particolare potrebbe offrire qualche forma di indicizzazione full-text che avrebbe aiutato).

Una query come questa spesso indica un problema di normalizzazione nella progettazione del database con più valori memorizzati in un singolo valore di campo. Se ciò è vero nel tuo caso e hai un certo grado di controllo sullo schema del database, ti consiglio di risolvere il problema il prima possibile. Altrimenti controlla la tua copertura medica per assicurarti che copra la psicosi indotta da SQL - questo può farti impazzire.

+4

+1 per "Consiglio di risolvere il problema il prima possibile". Un buon consiglio – NotMe

+0

Uh, ci sono problemi che non consiglieresti di risolvere? – Robus

+2

@Robus: qualsiasi dove la soluzione è più costosa del problema continuo. –

1

Un modo:

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%' 

ecc

+0

Non UNION ALL, penso, poiché alcune righe potrebbero corrispondere a diverse condizioni. Penso che un'UNIONE "normale" fintanto che il PK sia incluso nella lista dei campi selezionati. –

+0

@Larry: regolato di conseguenza. Grazie – NotMe

Problemi correlati