2013-05-31 85 views
1

我在表列中有下列varchar值'1,2,4,5,...'。 基本上,它們只是CSV格式的代碼。我知道這是一個糟糕的設計,但這是我不得不面對的問題。如何使用CSV在子查詢上執行IN操作?

現在我想創建一個子查詢來查找對應於所有代碼的描述。 我該怎麼做?

我已經嘗試了子查詢像

SELECT description FROM table WHERE table.CODE IN tablewithcsv.csvcolumn 

,但無濟於事。 正常IN的期望值如('1', '2', '3'),但我懷疑我的價值通過爲'1,2,3'。我必須在這裏做一些替換嗎?

回答

1

要在搜索字符串,你可以使用:

SELECT description FROM `table` 
INNER JOIN `tablewithcsv` ON `tablewithcsv`.csvcolumn LIKE '%' + `table`.CODE + '%' 

這將工作,如果整數是唯一的字符長,但會在一個以上的炭返回誤報。如果你有一個以上的字符,你可以改變它是這樣:

SELECT description FROM `table` 
INNER JOIN `tablewithcsv` ON `tablewithcsv`.csvcolumn = `table`.CODE 
    OR `tablewithcsv`.csvcolumn LIKE `table`.CODE + ',%' 
    OR `tablewithcsv`.csvcolumn LIKE '%,' + `table`.CODE 
    OR `tablewithcsv`.csvcolumn LIKE '%,' + `table`.CODE + ',%' 

這也可以更優雅的完成使用正則表達式

+0

就像一個魅力,謝謝!當然,%1%與1,2,3相匹配! :D – Davio

+0

@Davio - 同樣匹配'12,41' –

+0

當然,你說得對,馬丁,但幸運的是,「整數」都是固定長度的「鍵」。 – Davio

相關問題