我有一个像这样的数据库(Mysql 5.6):
id | value
--------------------------
1 | "value1;value2;value3"
2 | "value4;value5;value6"
我想发出如下请求:
SELECT id FROM table WHERE 'value5' IS IN value
return --> 2
SQLFiddle:http://sqlfiddle.com/#!9/b5c347
我无法更改数据库架构
答案 0 :(得分:1)
如果所有值都不同,您可以使用LIKE:
SELECT id FROM table WHERE value LIKE '%value5%';
请记住,如果你有一些包含另一个的值,它就不会起作用,比如
value2;value3;value56
或使用RegExp,如下所示:
SELECT id FROM table WHERE value REGEXP '(^|[^a-z0-9])value5([^a-z0-9]|$)'
答案 1 :(得分:1)
Use LIKE syntax, but use it like this:
SELECT id
FROM table
WHERE
value LIKE 'value5;%' OR
value LIKE '%;value5' OR
value LIKE '%;value5;%' OR
value LIKE 'value5';
This is a dirty solution, and not possible to index, but should fit your needs (On a smallish table in a reasonable amount of time)
Another solution (If you're sure your values don't contain commas):
SELECT id
FROM table
WHERE
FIND_IN_SET('value5', REPLACE(value, ';', ',')