首页 > 解决方案 > 带有通配符的 MYSQL 查询帮助

问题描述

首先,这是 mysql 数据的样子:

"group" column in "table_a"
---------------
user1 = 123,456,789
user2 = 789,897,12
user3 = 789
user4 = 4789,123,456
---------------

我正在尝试返回在其组列字段中具有“789”的所有用户。

我有:

SELECT * from table_a WHERE group LIKE %789%

此查询返回 user1,user2,user3,user4(user4 不应该是结果的一部分)

和:

SELECT * from table_a WHERE group LIKE %789%

只返回 user3

如何只返回 user1、user2 和 user3?

标签: mysqlsqlcsvwhere-clause

解决方案


显然,您的查询缺少右操作数周围的单引号like

where grp like '%789%'

但是请注意,检查一个值是否属于逗号分隔列表并不可靠,因为它会部分匹配任何值。如果您的列表是 like '123,45,67890',那么 like 表达式将匹配,而您可能不希望这样。

我会推荐find_in_set()

where find_in_set('789', grp)

最后:您不应该有一个数据模型,其中多个数字存储在单个字符串列中。相反,您应该有另一个表,其中每个值都存储在单独的行中。可以在这个著名的 SO question中阅读有关此内容的更多信息。

注意:group是语言关键字,因此不是列名的好选择;我grp在上面的代码片段中将其重命名为;


推荐阅读