未规范化的数据库有一个名为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在另一篇文章中所建议的那样 - 只有在第一项匹配
时才会起作用答案 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);