mysql 使用FIND_In_SET进行多重搜索

a6b3iqyw  于 2022-11-21  发布在  Mysql
关注(0)|答案(1)|浏览(131)

我的数据库结构如下:

id    values
1     10,15,50,89,200,590
2     30,50,89,45,20
3     15,20,40,50,10,500
4     20,30,90,89,50

我想编写一个查询来筛选数据,如下所示:

2     30,50,89,45,20
4     20,30,90,89,50

也就是说,查找包含数字20、50和89的所有行
我努力解决这个问题:

WHERE FIND_IN_SET("20", values)
oyxsuwqo

oyxsuwqo1#

如果-根据您的描述-所有数字都必须出现,只需对所有数字重复您的条件:

SELECT id, yourcolumn
FROM yourtable
WHERE FIND_IN_SET(20,yourcolumn)
AND FIND_IN_SET(50,yourcolumn)
AND FIND_IN_SET(89,yourcolumn);

如果至少有一个必须出现,您可以将“AND”替换为“OR...”

SELECT id, yourcolumn
FROM yourtable
WHERE FIND_IN_SET(20,yourcolumn)
OR FIND_IN_SET(50,yourcolumn)
OR FIND_IN_SET(89,yourcolumn);

或者你可以使用一个更短的正则表达式:

SELECT id, yourcolumn
FROM yourtable
WHERE CONCAT(",", `yourcolumn`, ",") REGEXP ",(20|50|89),";

第一个注意:我在查询中重命名了列“values”,因为SQL关键字不应用作列名。
第二个注意事项:最好将数据规范化,这意味着创建单独的列来应用单独的条件或值,而不是使用逗号分隔的列表。

相关问题