0

正規化されていないデータベースには、バッチという名前のテーブルがあります

テーブル batches には、複数の ID を持つフィールド student_ids があります。例えば1311, 1319, 1400

From: SELECT student_ids FROM バッチ WHERE 1311 IN(student_ids)

Student_id を取得します。1311, 1319, 1400

そして: SELECT student_ids FROM batches WHERE 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 FROM batches WHERE INSTR(','+1319+',', ','+CAST(student_ids AS CHAR) + ',') も試しました

Matt Ellen が別の投稿で提案したように - 最初の項目が一致する場合にのみ機能します

4

1 に答える 1

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);
于 2012-08-08T10:20:04.753 に答える