0

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

表批次具有字段 student_ids ,其中包含多个 id。例如1311, 1319, 1400

来自:从批次中选择 student_ids WHERE 1311 IN(student_ids)

我们得到 student_ids:1311, 1319, 1400

并且:从批次中选择 student_ids WHERE 1319 IN(1311, 1319, 1400)

工作正常:1311, 1319, 1400

从批次中选择 student_ids WHERE 1319 IN(student_ids)

或者

从批次 b 中选择 @student_ids := student_ids;从批次中选择 student_ids WHERE FIND_IN_SET(1319, @student_ids)

返回Null

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

我已经尝试过 Dash 的建议(非常感谢 Dash),但我仍然遇到问题

我也试过 SELECT id FROM batches WHERE INSTR(','+1319+',', ','+CAST(student_ids AS CHAR) + ',')

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

4

1 回答 1

0

try this:

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) ;

or

SELECT student_ids FROM batches WHERE CAST(student_ids AS UNSIGNED INTEGER) IN (1319);
于 2012-08-08T10:20:04.753 回答