mybatis的一對多或者多對多的時候,2中方式解決,一種是嵌套select,但是會有n+1問題,不推薦;另外一種是使用一條sql,在該sql里面使用子查詢的方式來完成。比如
select * from clazz m left join student mm on m.id = mm.clazz_id where m.id in (select t.id from clazz t limit 0, 10),但是這種方式有小問題,mysql的in這種子查詢不支持帶有limit的子查詢,也就是說上面紅色部分中帶有limit,並且在in子句中,會報錯:
[Err] 1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
解決該問題的是在子查詢外面在套一層,如下
select * from clazz m left join student mm on m.id = mm.clazz_id where m.id in (select id from (select t.id from clazz t limit 0, 10) as id),
這樣子就解決了n+1問題。
還有另外一種寫法也可以實現:
select * from (select * from teacher t limit 0, 2) tt left join clazz ttt on tt.id = ttt.teacher_id;