mybatis多表查询left join on的属性到底是哪张表
时间: 2023-11-26 20:03:05 浏览: 118
根据提供的引用内容,可以看出在多表查询中使用了left join on语句。具体来说,属性是从左连接的两个表中获取的。在引用[2]中的示例中,属性是从"user"表和"sys_role"表中获取的。在引用[3]中的示例中,属性是从"orders"表和"user"表中获取的。因此,left join on的属性取决于具体的查询语句和连接的表。
相关问题
mybatis多表关联查询 join 和left join 有什么区别
### MyBatis 中 Join 和 Left Join 的区别
在数据库查询中,`JOIN` 和 `LEFT JOIN` 是用于连接多个表的关键字,在 MyBatis 进行多表关联查询时也广泛应用这两种方式。
#### Join 关键字
当使用 `JOIN`(内联接)时,只有那些满足连接条件的记录才会被返回。这意味着两个表中的匹配项都存在的情况下才会有结果输出。对于不满足条件的数据,则不会显示出来[^1]。
```sql
SELECT t.id, t.no, t.type
FROM demo t
JOIN demo2 t1 ON (t.demo2id = t1.id AND t.type = 2)
WHERE t.deleted = 0;
```
这段 SQL 将仅展示 `demo` 表中有对应 `demo2` 记录且类型等于 2 并未删除的所有条目。
#### Left Join 关键字
而采用 `LEFT JOIN`(左外联接),即使右侧表没有相配对的信息也会保留左侧表所有的原始数据,并将右边不符合条件的部分字段填充为 NULL 值来表示缺失值[^3]。
```sql
SELECT t.id, t.no, t.type, t1.name AS demo2Name
FROM demo t
LEFT JOIN demo2 t1 ON (t.demo2id = t1.id AND t.type = 2)
WHERE t.deleted = 0;
```
此语句会列出所有符合条件 (`type=2`) 或者已被标记为已删除之外的所有 `demo` 条目的 ID 号码及其编号和类别;同时还会尝试获取相应的名称来自另一个表格(`demo2`)。如果没有找到合适的关联对象,则这些额外列将会为空(null)。
通过上述对比可以看出:
- **Join**: 返回的是两张或多张表之间的交集部分;
- **Left Join**: 不仅仅限于共同存在的记录,还包括左边那张表里独有的全部内容。
因此,在实际开发过程中应根据业务逻辑的需求选择合适类型的联结方法来进行有效的多表联合检索操作。
mybatis-plus查询三张表数据
mybatis-plus可以通过使用实体类和查询条件来实现多表查询。可以通过创建QueryWrapper对象来构建查询条件,然后使用selectList方法执行查询。下面是一个示例代码:
```
QueryWrapper<Entity1> wrapper = new QueryWrapper<>();
wrapper.eq("属性名", 值); // 设置查询条件
List<Entity1> result = entity1Mapper.selectList(wrapper);
```
在这个示例中,Entity1是第一张表的实体类,"属性名"是第一张表注解为TableId(mybatis-plus注解)的属性名,值是要匹配的值。你可以根据需求来设置其他的查询条件。
如果需要查询三张表的数据,可以使用关联查询来实现。你可以在QueryWrapper对象上使用leftJoin方法来进行关联查询,具体的代码示例如下:
```
QueryWrapper<Entity1> wrapper = new QueryWrapper<>();
wrapper.eq("属性名", 值); // 设置查询条件
wrapper.leftJoin("表名2", "表名2.关联字段 = 表名1.关联字段"); // 设置关联查询条件
wrapper.leftJoin("表名3", "表名3.关联字段 = 表名1.关联字段"); // 设置关联查询条件
List<Entity1> result = entity1Mapper.selectList(wrapper);
```
在这个示例中,"表名2"和"表名3"是需要关联查询的表的名称,"关联字段"是表之间的关联字段。你可以根据实际情况来设置相应的表名和关联字段。
阅读全文
相关推荐
















