WHERE-IN或FIND_IN_SET

时间:2012-08-08 10:16:56

标签: mysql where-in

未规范化的数据库有一个名为batches的表

表格批次中包含多个ID的字段student_ids。例如1311, 1319, 1400

发件人:SELECT student_ids FROM批处理WHERE 1311 IN(student_ids)

我们获得student_ids:1311, 1319, 1400

并且:SELECT student_ids FROM批次在哪里1319 IN(1311,1319,1400)

工作正常:1311, 1319, 1400

SELECT student_ids FROM批处理WHERE 1319 IN(student_ids)

SELECT @student_ids:= student_ids FROM批次b; SELECT student_ids FROM批处理WHERE FIND_IN_SET(1319,@ student_ids)

返回Null

我错过了什么?我想我必须将第一个结果转换成数组 - 但是如何?

我尝试过Dash的建议(非常感谢Dash),但我仍然遇到了麻烦

我也试过了 SELECT id 从批次 在哪里INSTR(','+ 1319 +',',','+ CAST(student_ids AS CHAR)+',')

正如Matt Ellen在另一篇文章中所建议的那样 - 只有在第一项匹配

时才会起作用

1 个答案:

答案 0 :(得分:0)

试试这个:

SELECT @student_ids := GROUP_CONCAT(CAST(TRIM(student_ids) AS UNSIGNED INTEGER)) 
FROM batches b; 

SELECT student_ids 
FROM batches 
WHERE FIND_IN_SET(1311, @student_ids) ;

SELECT student_ids FROM batches WHERE CAST(student_ids AS UNSIGNED INTEGER) IN (1319);