2010-10-14 33 views
7

我必須選擇其中的所有記錄:如何編寫SQL語句以使用「LIKE」獲得九個不同的值?

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

這裏,value21,...,value29是,用戶可以把一個表單提交查詢之前的參數。它們是(不是隨後的)數字代碼,並且FIELD2是包含字符串值的數據庫列。

哪個是寫下我的SQL查詢最緊湊的形式?

注意:這與an earlier question有關,但這需要LIKE而不是等於。

+1

這將幫助我們極大的,如果你告訴我們什麼'value21..value29'是 – Sathya 2010-10-14 17:45:09

+1

和:什麼數據庫? – Arjan 2010-10-14 17:46:32

+0

@Arjan,你是對的:我已經更新了我的問題。現在解釋數據庫結構對我來說太困難了。你有什麼具體的問題嗎? – 2010-10-14 17:56:47

回答

16

我怕你堅持:

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

至少在標準SQL(您的特殊引擎可能會提供某種形式的全文索引的,這將有助於)。

像這樣的查詢常常表示數據庫設計中的規範化問題,其中多個值存儲在單個字段值中。如果您的情況屬實,並且您對數據庫架構有任何控制權,我建議儘快解決問題。否則檢查你的醫療保險,以確保它涵蓋SQL引發的精神病 - 這可能會讓你瘋狂。

+4

+1「我建議儘快解決問題」。好建議 – NotMe 2010-10-14 19:03:43

+0

恩,有沒有問題你不會推薦修復? – Robus 2010-10-14 21:16:22

+2

@Robus:任何解決方案比持續問題成本更高的地方。 – 2010-10-15 11:43:20

1

方式一:

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

+0

不是聯盟所有,我認爲,因爲一些行可能匹配幾個不同的條件。我認爲只要包含在所選字段列表中的「常規」聯盟。 – 2010-10-14 21:10:12

+0

@Larry:相應調整。謝謝 – NotMe 2010-10-14 21:15:06