結合基準でMySQL の関数を使用できます。FIND_IN_SET()
table_a JOIN table_b ON FIND_IN_SET(table_a.id_a, table_b.csv_a)
ただし (上記のコメントの警告に従って)、MySQL は両方のテーブルを完全にスキャンする必要があるため、この操作は非常に非効率的です。
はるかに優れた解決策は、関係のテーブルを作成することです。
CREATE TABLE relations (
FOREIGN KEY (id_a) REFERENCES table_a (id_a),
FOREIGN KEY (id_b) REFERENCES table_b (id_b)
) SELECT table_a.id_a, table_b.id_b
FROM table_a JOIN table_b
ON FIND_IN_SET(table_a.id_a, table_b.csv_a);
ALTER TABLE table_b DROP csv_a;
次に、必要に応じてテーブルを結合して、必要なデータをクエリできます。
SELECT table_a.*
FROM table_a JOIN relations USING (id_a)
WHERE relations.id_b = ?
必要に応じて、MySQL のGROUP_CONCAT()
関数を使用して元の CSV を取得することもできます。
SELECT table_b.id_b, GROUP_CONCAT(relations.id_a) AS csv_a
FROM table_b JOIN relations USING (id_b)
WHERE ...
GROUP BY table_b.id_b