1

我在表格列中有以下 varchar 值 '1,2,4,5, ...'。基本上,它们只是 CSV 格式的代码。我知道这是一个糟糕的设计,但不幸的是,这就是我必须处理的问题。

现在我想创建一个子查询来查找与所有代码对应的描述。我怎么做?

我试过一个像

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

但无济于事。正常 IN 的期望值如('1', '2', '3'),但我怀疑我的值被传递为'1,2,3'。我必须在这里做一些更换吗?

4

1 回答 1

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

这也可以使用正则表达式更优雅地完成

于 2013-05-31T09:18:40.623 回答