我有一个列包含以逗号分隔的值。
1,2,3
4,6,7
2,3,8
12234,5467,232445,232455,11223
给定数组的标准(例如,1,4,9
),
如何选择值包含任何给定值的行?
我的意思是当我获得1,4,9
时,我需要选择
1,2,3 -- has 1
4,6,7 -- has 4
更新
我有一个表,其中包含一列逗号分隔的其他实体的主键值。 我理解原始表设计师之所以这样做的原因。 其他实体实际上驻留在其他数据库中,这意味着不可连接。或者他或她只是想这样做。
id name classes
---------------------------
1 John 1,2,3
2 Jane 2,8,233423423
使用逗号分隔的班级编号,找到参加其中任何一个的学生。
given: 1 -> select John
given: 233423423 -> select Jane
given: 1,233423423 -> select Both
答案 0 :(得分:1)
如果你有一个输入1,4,9
,你必须找到以逗号分隔的列表中出现1,4或9中任何一行的行?
SELECT ...
FROM MyTable
WHERE FIND_IN_SET(1, mycolumn)
OR FIND_IN_SET(4, mycolumn)
OR FIND_IN_SET(9, mycolumn)
有关此功能的信息,请参阅https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set。
这应该向您说明,当您希望将列表的元素视为离散值时,存储逗号分隔列表对于关系数据库不是一个好主意。
另请参阅我对Is storing a delimited list in a database column really that bad?
的回答答案 1 :(得分:1)
您可以将动态模板用于正则表达式。例如:
SET @Criteria='1,4,9';
SELECT `name`
FROM STUDENT
WHERE STUDENT.classes REGEXP concat('(^|,)(', REPLACE(@Criteria, ',', '|'), ')(,|$)');