mysql - 如何在 coumn_name 有逗号分隔值的情况下运行 sql 查询?
问题描述
CustomerID cat_id ContactName Address City PostalCode Country
1 Alfreds 13 Maria Anders Obere Str Berlin 12209 Germany
4 Around 13,14 Thomas Hardy 120 Hanov London WA1 1DP UK
获取 14 条数据的查询是什么?我努力了
SELECT *
FROM `customers`
WHERE cat_id IN (13,14)
但失败了。
解决方案
修复你的数据模型!为什么是错的?
- 数值应存储在具有正确类型的列中,而不是字符串。
- 这些看起来像 id。应正确定义外键关系。
- SQL 的字符串处理能力很差。
- 使用字符串操作的查询通常无法优化,从而优化使用索引、表统计信息和分区。
- SQL 有这种非常棒的数据结构来存储列表。它被称为表。
因此,您应该有一个表格,其中每行customer_id
和cat_id
. 这通常称为“联结表”或“关联表”。
也就是说,有时我们会被其他人所困,非常非常非常糟糕的设计决策。如果是这样,你可以做你想做的事find_in_set()
:
where find_in_set(13, cat_ids) > 0 and -- or is that "or"
find_in_set(14, cat_ids) > 0
推荐阅读
- multithreading - 非常短的任务的线程同步
- c - 使用 C 在链表中的现有元素之前插入时无限打印
- reactjs - (原因:CORS 请求没有成功)
- pickle - 由于导入问题,Ray 无法取消远程功能?
- amazon-elastic-beanstalk - 如何在 aws beanstalk 文件 install_packages.config 中为 yum install 指定存储库?
- swift - 一次更改一个状态以查看清单
- php - Laravel Laravel\Socialite\Two\InvalidStateException
- python - 通过另一个 dict 订购 Django 查询集
- javascript - 如何在href中获取具有相同关键字的元素
- r - 如何在 R 中读取带有重复列的羽毛文件