我有一个表,其中一列包含一个文本值,其中一些是逗号分隔的字符串,如下所示:
Downtown, Market District, Warehouse District
我需要修改我的查询以查看给定值是否与此列匹配。我决定使用IN()是最好的选择。
SELECT *
FROM t1
WHERE myValue IN (t1.nighborhood)
我得到了不稳定的结果 - 有时我会返回记录,有时候不会。如果 t1.nighborhood 中的值与 myValue 匹配,我会获得数据。
我查了一下,没有MySQL错误。我错过了什么?
答案 0 :(得分:0)
您可以使用FIND_IN_SET()
搜索以逗号分隔的列表:
SELECT *
FROM t1
WHERE FIND_IN_SET(myValue, REPLACE(t1.nighborhood, ', ', ','));
删除多余的空格需要REPLACE()
。
另一种解决方案是在必要时使用正则表达式匹配逗号所包围的搜索值:
SELECT *
FROM t1
WHERE t1.nighborhood REGEXP CONCAT('(^|, )', myValue, '(, |$)');
通常,将不同的值存储在单个列中是不好的设计。应将数据规范化为带有外键的相关表。