WHERE добавляется оператор AND. Это происходит потому, что каждый раз, когда добавляется новое условие, оператор AND добавляется к существующему условию WHERE, что может привести к некорректному SQL-запросу.
1.5.3
База данных: mysql-8.0.4
При использовании left join для объединения пользовательского SQL, когда есть условия, после WHERE всегда добавляется AND, что приводит к ошибке
Код:
private MPJLambdaWrapper buildQueryWrapper(DeviceLogBo bo) {
MPJLambdaWrapper lqw = JoinWrappers.lambda();
lqw.selectAll(DeviceLog.class)
.selectAs("tt.device_no", DeviceLog::getDeviceNo)
.selectAs("sup.supplier_name", DeviceLog::getSupplierName)
.leftJoin(String.format("(select device_id,device_no,supplier_id from t_meter union all select device_id,device_no,supplier_id from t_terminal) tt on tt.device_id = %s.device_id",
lqw.getAlias()))
.leftJoin("t_supplier sup on sup.supplier_id = tt.supplier_id");
lqw.eq(bo.getDeviceId() != null, DeviceLog::getDeviceId, bo.getDeviceId());
lqw.like(StringUtils.isNotBlank(bo.getSupplierName()), "sup.supplier_name", bo.getSupplierName());
lqw.eq(StringUtils.isNotBlank(bo.getDeviceType()), DeviceLog::getDeviceType, bo.getDeviceType());
lqw.like(StringUtils.isNotBlank(bo.getDeviceNo()), "tt.device_no", bo.getDeviceNo());
return lqw;
}
Сгенерированный SQL: