首页 > 解决方案 > 如果列在mysql中有多个用逗号分隔的值,如何传入where条件

问题描述

#id name product_id
1    chalam    1,2
2    satish    2,3
3    siva      3,4
4    gowtham   2,4


select id, name  where product_id in(3);

预期输出:

satish
siva

标签: mysql

解决方案


你可以FIND_IN_SET在这里使用:

SELECT id, name
FROM yourTable
WHERE FIND_IN_SET('3', product_id) > 0;

请注意,虽然 MySQL 巧合地提供FIND_IN_SET了可以在 CSV 字符串中搜索值的功能,但通常我们应该避免使用此功能。在表中存储 CSV 数据是糟糕的数据库设计。相反,您应该规范化您的数据。以下是标准化表的示例:

id | name    | product_id
1  | chalam  | 1
1  | chalam  | 2
2  | satish  | 2
2  | satish  | 3
3  | siva    | 3
3  | siva    | 4
4  | gowtham | 2
4  | gowtham | 4

假设给定的名称/id 只与product_id上表中给定的一次相关联,您可以将查询简化为:

SELECT id, name
FROM yourTable
WHERE product_id = 3;

推荐阅读