2010-10-14 32 views
7

tôi phải chọn tất cả các hồ sơ đó:Làm thế nào để viết một câu lệnh SQL để sử dụng "LIKE" cho chín giá trị khác nhau?

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

Ở đây, value21 ..., value29 là các thông số mà người dùng có thể đặt trong một hình thức trước khi trình các truy vấn. Đó là các mã số (không phải tiếp theo) và FIELD2 là cột cơ sở dữ liệu đang giữ một giá trị chuỗi.

Biểu mẫu nhỏ gọn nhất để ghi lại truy vấn SQL của tôi là gì?

Lưu ý: Điều này liên quan đến an earlier question, nhưng điều này cần LIKE thay vì bằng.

+1

Nó sẽ giúp chúng tôi vô cùng nếu bạn cho chúng tôi biết những gì 'value21..value29' là – Sathya

+1

Và: những gì cơ sở dữ liệu? – Arjan

+0

@Arjan, bạn nói đúng: Tôi đã cập nhật câu hỏi của mình. Bây giờ tôi quá khó để giải thích cấu trúc cơ sở dữ liệu. Bạn có câu hỏi cụ thể nào không? –

Trả lời

16

Tôi sợ bạn đang mắc kẹt với:

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

ít nhất là trong SQL chuẩn (động cơ cụ thể của bạn có thể cung cấp một số hình thức lập chỉ mục toàn văn bản mà có thể giúp).

Truy vấn như thế này thường cho biết vấn đề bình thường hóa trong thiết kế cơ sở dữ liệu của bạn với nhiều giá trị được lưu trữ trong một giá trị trường duy nhất. Nếu điều đó đúng trong trường hợp của bạn và bạn có bất kỳ mức độ kiểm soát nào đối với lược đồ cơ sở dữ liệu, tôi khuyên bạn nên khắc phục sự cố càng sớm càng tốt. Nếu không, hãy kiểm tra bảo hiểm y tế của bạn để chắc chắn rằng nó bao gồm rối loạn tâm thần do SQL gây ra - điều này có thể khiến bạn phát điên.

+4

+1 cho "Tôi khuyên bạn nên khắc phục sự cố càng sớm càng tốt". Lời khuyên tốt – NotMe

+0

Uh, có vấn đề gì bạn không khuyên bạn nên sửa chữa? – Robus

+2

@Robus: bất kỳ nơi nào giải pháp tốn kém hơn vấn đề tiếp theo. –

1

Một cách:

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

, vv

+0

Không UNION TẤT CẢ, tôi nghĩ, vì một số hàng có thể phù hợp với một số điều kiện khác nhau. Tôi nghĩ rằng một UNION "thường xuyên" miễn là PK được bao gồm trong danh sách các trường được chọn. –

+0

@Larry: điều chỉnh cho phù hợp. cảm ơn – NotMe

Các vấn đề liên quan