我有一列包含空格分隔的单词:
| tags |
--------------------------
| python javascript java |
现在,我想选择具有特定单词的行。
select * from table where [
'java'in tags]
注意,当我使用java
进行选择时,不应该选择仅包含javascript
的行,这意味着它必须是单词级匹配。
感谢
您可以使用FIND_IN_SET
来获得正确的行。由于它使用逗号分隔符,您需要将空格替换为逗号才能获得正确的结果;
SELECT *
FROM table1
WHERE FIND_IN_SET('java', REPLACE(tags, ' ', ',')) > 0
要测试的SQLfiddle。
也就是说,使用您显示的表格式的查询将无法使用索引,并且当数据量增长时会非常缓慢。您将更好地使用每行标记,这样您就可以使用简单的equals匹配。通过这种方式使用索引,您将获得相当大的性能提升。
一个快速的样本。
我最初考虑使用FIND_IN_SET,但简单的LIKE应该能满足您的期望。
select * from tableA where tags LIKE '%java%'