mysql - 带有通配符的 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?
解决方案
显然,您的查询缺少右操作数周围的单引号like
:
where grp like '%789%'
但是请注意,检查一个值是否属于逗号分隔列表并不可靠,因为它会部分匹配任何值。如果您的列表是 like '123,45,67890'
,那么 like 表达式将匹配,而您可能不希望这样。
我会推荐find_in_set()
:
where find_in_set('789', grp)
最后:您不应该有一个数据模型,其中多个数字存储在单个字符串列中。相反,您应该有另一个表,其中每个值都存储在单独的行中。可以在这个著名的 SO question中阅读有关此内容的更多信息。
注意:group
是语言关键字,因此不是列名的好选择;我grp
在上面的代码片段中将其重命名为;
推荐阅读
- aws-lambda - 将相同的函数部署到 ASW Lambda 上的不同端点
- powershell - 需要使用 Groovy 在 SoapUI 中调用 PowerShell 文件
- javascript - 重新抛出自定义异常 JavaScript
- virtual-machine - MacOS > Virtualbox > Centos 7.7 如何设置ip/获取IP
- java - 二元运算符 & 的错误操作数类型
- python - 在 Pandas 中计算滚动回归并存储斜率
- python - 如何根据 Tensorflow 中的条件引发错误?
- c# - 通过脚本将自定义图层设置为剔除蒙版
- python - TypeError:无法将 0.0 转换为 dtype int32 的 EagerTensor
- ios - iOS 13:@objc VC.navigationController(_:willShow:animated:):线程违规:预期主线程