我想重写我的 MySQL 查询,以便除非必要,否则最后一个表连接不会进行全表扫描。table1.csv 是一个 varchar 字段,其中包含与 table2 的 join_id 列相关的逗号分隔 ID。我只想调用 FIND_IN_SET,当 table2 在第一次连接中未连接到 table1 并且 table1 的 csv 列不是空字符串时,它会执行全表扫描。
SELECT table1.id, table1.csv, GROUP_CONCAT(`unlocked`.join_id)
AS `list` FROM table1 LEFT JOIN table2 ON table1.id=table2.join_id
LEFT JOIN table2 `unlocked` ON table2.join_id IS NULL AND table1.csv<>'' AND
FIND_IN_SET(`unlocked`.join_id, table1.csv) WHERE table1.id IN ([comma separated values])
GROUP BY table1.id