yulichang / mybatis-plus-join

支持连表查询的mybatis-plus,mybatis-plus风格的连表操作提供wrapper.leftJoin(),wrapper.rightJoin()等操作
https://yulichang.github.io/mybatis-plus-join-doc/
Apache License 2.0
971 stars 113 forks source link

多表关联表查询错误,是否可以在leftJoin中,关联右表自定义别名 #83

Closed lanjf2000 closed 5 months ago

lanjf2000 commented 7 months ago

当前使用版本 1.4.6

该问题是如何引起的?(确定最新版也有问题再提!!!) 目前有3个关系表,tableA (1)-->(n) tableB , tableC tableC 是tableB 的 自关联表关系映射表 tableC有2个字段: id, pre_id tableC的这2个字段值,存储的都是 tableB的 ID 值

重现步骤(如果有就写完整) MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(TableA.class) .selectCollection(TableB.class, TableADTO::getBList, b->b .collection(TableC.class, TableBDTO::getCList, c -> c .selectAssociation("pre", TableB.class, TableCDTO::getTableB)) .leftJoin(TableB.class, TableB::getAid, TableA::getId) .leftJoin(TableC.class, TableC::getId, TableB::getBid) .leftJoin(TableB.class, "pre", TableB::getId, TableC::getPreId);

List dtos = tableMapper.selectJoinList(TableADTO.class, wrapper);

报错信息 Unknown column 'pre.ID' in 'on clause'

SQL报错语句: SELECT COUNT(*) AS total FROM TableA t LEFT JOIN TableB t1 ON (t1.A_ID = t.ID ) LEFT JOIN TableC t2 ON ( t2.ID = pre.ID ) LEFT JOIN TableB pre ON (pre.ID = t2.prework_id)

这个SQL正确需求语句: SELECT COUNT(*) AS total FROM TableA t LEFT JOIN TableB t1 ON (t1.A_ID = t.ID ) LEFT JOIN TableC t2 ON ( t2.ID = t1.ID ) LEFT JOIN TableB pre ON (pre.ID = t2.prework_id)

yulichang commented 5 months ago

1.4.8 https://mybatisplusjoin.com/pages/core/lambda/join/leftJoin.html