mybatis多表联查结果去重
时间: 2023-07-07 14:33:27 浏览: 106
在 MyBatis 中进行多表联查时,如果查询结果出现了重复数据,可以通过两种方式去重:
1. 使用 DISTINCT 关键字
在 SQL 查询语句中使用 DISTINCT 关键字,可以去除查询结果中的重复数据。例如:
```sql
SELECT DISTINCT a.*, b.*
FROM table_a a
LEFT JOIN table_b b ON a.id = b.a_id
```
2. 使用 GROUP BY 子句
在 SQL 查询语句中使用 GROUP BY 子句,可以将查询结果按照指定的字段进行分组,并且只返回每个分组的第一条记录。例如:
```sql
SELECT a.*, b.*
FROM table_a a
LEFT JOIN table_b b ON a.id = b.a_id
GROUP BY a.id, b.id
```
需要注意的是,在使用 GROUP BY 子句时,需要将 SELECT 字段和 GROUP BY 字段保持一致。如果 SELECT 字段中包含了 GROUP BY 字段之外的字段,需要使用聚合函数进行计算,比如 COUNT、SUM、AVG 等。
相关问题
mybatis collection标签会主动去重
MyBatis的collection标签不会主动去重。在MyBatis中,collection标签用于处理一对多或者多对多的关联关系,将查询到的关联结果集映射为一个集合。
例如,在一个订单信息查询中,订单和商品是一对多的关系,我们可以通过collection标签将查询到的商品信息映射为一个集合。在collection标签中,我们可以使用select属性指定查询商品信息的SQL语句,使用resultMap属性指定一个结果集映射。
但是,在查询到的商品信息中,如果有重复的商品数据,在collection标签的映射结果中也会出现重复的数据。这是因为MyBatis并不会对集合中的数据进行去重操作。如果要实现去重,我们需要在SQL语句中使用DISTINCT关键字或者在程序中手动处理重复数据。
所以,我们需要注意,在使用MyBatis的collection标签时,要确保查询结果是唯一的,避免出现重复数据,或者在程序中进行去重处理,以得到我们期望的结果。
Mybatis-plus 查询实现去重
可以使用 Mybatis-plus 提供的 QueryWrapper 类来实现去重查询。具体实现方式是在 QueryWrapper 中使用 groupBy 方法,并指定需要去重的字段。
例如,假设我们有一个 User 实体类,其中包含 id 和 name 两个字段,我们需要根据 name 字段进行去重查询,可以使用以下代码:
```
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("name").groupBy("name");
List<User> userList = userMapper.selectList(wrapper);
```
这样就可以得到去重后的 User 列表。
阅读全文