如果列在MySQL中有多个逗号分隔的值时如何传递条件

时间:2019-01-03 13:39:04

标签: mysql

#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

1 个答案:

答案 0 :(得分:2)

您可以在此处使用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

假设上表中给定的名称/标识仅与给定的product_id关联一次,则可以将查询简化为:

SELECT id, name
FROM yourTable
WHERE product_id = 3;