2010-10-14 12 views
7

muszę zaznaczyć wszystkie rekordy gdzie:Jak napisać instrukcję SQL, aby użyć "LIKE" dla dziewięciu różnych wartości?

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

Tutaj value21, ..., value29 są parametry, które użytkownik może umieścić w formie przed przesłaniem zapytania. Są to (nie kolejne) kody liczbowe, a FIELD2 to kolumna bazy danych przechowująca wartość ciągu.

Która jest najbardziej kompaktowa forma spisać moje zapytanie SQL?

Uwaga: Jest to związane z an earlier question, ale wymaga to LIKE, a nie jest równa.

+1

Byłoby nam niezmiernie jeśli powiesz nam, co 'value21..value29' jest – Sathya

+1

A: co baza danych? – Arjan

+0

@Arjan, masz rację: zaktualizowałem swoje pytanie. Obecnie zbyt trudno jest mi wyjaśnić strukturę bazy danych. Czy masz jakieś konkretne pytanie? –

Odpowiedz

16

Obawiam utkniesz z:

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

przynajmniej w standardzie SQL (twój szczególności silnik może zaoferować jakąś formę indeksowania pełnotekstowego, która pomogłaby).

Zapytanie jak to często wskazuje na problem normalizacji w projektowaniu baz danych z wielu wartości przechowywanych w pojedynczej wartości pola. Jeśli tak jest w twoim przypadku i masz jakąkolwiek kontrolę nad schematem bazy danych, radzę jak najszybciej rozwiązać problem. W przeciwnym razie sprawdź zasięg ubezpieczenia, aby upewnić się, że obejmuje on psychozę wywołaną przez SQL - może to doprowadzić Cię do szału.

+4

+1 za "Radzę jak najszybciej rozwiązać problem". Dobra rada – NotMe

+0

Czy są jakieś problemy, których nie zaleca się naprawiać? – Robus

+2

@Robus: wszędzie tam, gdzie rozwiązanie jest droższe niż ciągły problem. –

1

Jednym ze sposobów:

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

itp

+0

Not UNION ALL, myślę, ponieważ niektóre wiersze mogą pasować do kilku różnych warunków. Myślę, że "regularna" UNION tak długo, jak PK znajduje się na liście wybranych pól. –

+0

@Larry: odpowiednio dostosowane. dzięki – NotMe

Powiązane problemy