我的数据库结构如下:
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)
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关键字不应用作列名。第二个注意事项:最好将数据规范化,这意味着创建单独的列来应用单独的条件或值,而不是使用逗号分隔的列表。
1条答案
按热度按时间oyxsuwqo1#
如果-根据您的描述-所有数字都必须出现,只需对所有数字重复您的条件:
如果至少有一个必须出现,您可以将“AND”替换为“OR...”
或者你可以使用一个更短的正则表达式:
第一个注意:我在查询中重命名了列“values”,因为SQL关键字不应用作列名。
第二个注意事项:最好将数据规范化,这意味着创建单独的列来应用单独的条件或值,而不是使用逗号分隔的列表。