双表联查mysql_MySQL的双表多表联查

在EC-Mall二次开发中,需要展示汽车类的推荐商品。本文通过具体SQL语句,介绍了如何进行MySQL的双表联查,包括简单方法和使用inner join的方法,以获取商品和推荐商品的相关信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做EC-Mall的二次开发,遇到这么一个需求,将挂件单独显示成一个页面。由于EC-Mall的挂件是用数据模块+模块类库的方式进行的,就是使用类似smarty的形式。而单独一个页面的话,数据读取需要自己写SQL语句。 现在的问题是,需要将商品中的汽车类中的推荐

最近在做EC-Mall的二次开发,遇到这么一个需求,将挂件单独显示成一个页面。由于EC-Mall的挂件是用数据模块+模块类库的方式进行的,就是使用类似smarty的形式。而单独一个页面的话,数据读取需要自己写SQL语句。

现在的问题是,需要将商品中的汽车类中的推荐商品数据显示出来,sql如下:

select * from shop_goods as a

join shop_recommended_goods as b

where a.goods_id = b.goods_id

and b.recom_id = 36

order by b.sort_order asc

limit 14

其中,表shop_goods是存储了所有商品信息的数据表,shop_recommended_goods则是将商品id与推荐id相关联的表。

MySQL多表联查例子:

下面这两个MySQL多表联查方法都可以,inner join on 更好点。表结构没贴出来,但比较好懂了。

MySQL多表联查的简单方法:

select c.nom, e.nom

from consultant c, affaire a, besoin b, salarie sa, site s, entreprise e

where c.consultant_id=a.consultant_id and a.besoin_id=b.besoin_id and

b.salarie_id=sa.salarie_id and ssa.site_id=s.site_id and s.entreprise_id=e.entreprise_id

### 使用 MyBatis-Plus 实现双表联查 MyBatis-Plus 提供了简洁的方式来进行多表联合查询,简化了传统 MyBatis 中复杂的 XML 配置和 SQL 编写过程。以下是具体实现方式: #### 方法一:通过实体类映射关系配置 当两个表之间存在外键关联时,可以在对应的 Java 实体类中定义这种关系。 ```java // Entity A (Parent Table) @Data public class Parent { private Long id; @TableField(exist = false) private List<Child> children; // 子表对象列表 } // Entity B (Child Table) @Data public class Child { private Long id; private Long parentId; // 外键字段 } ``` 为了使上述代码生效,在 Mapper 接口中继承 `BaseMapper` 并重载相应方法来处理复杂查询逻辑[^1]。 #### 方法二:利用 Wrapper 进行条件构建 对于更灵活的查询需求,可以借助 QueryWrapper 或 UpdateWrapper 来动态拼接 SQL 语句片段,从而完成跨表的数据检索工作。 ```java QueryWrapper<Parent> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("parent.id", child.getParentId()); List<Parent> parents = parentService.list(queryWrapper); ``` 此段代码展示了如何基于子表记录去匹配父表的相关条目[^2]。 #### 方法三:编写自定义 SQL 查询 尽管 MyBatis-Plus 努力减少手写 SQL 的必要性,但在某些情况下仍需定制化 SQL 片段以满足特定业务场景的要求。此时可在 XML 文件内声明 SQL 脚本并调用之。 ```xml <select id="selectParentsAndChildren" resultType="map"> SELECT p.*, c.* FROM parent AS p LEFT JOIN child AS c ON p.id=c.parent_id WHERE ... </select> ``` 以上三种途径均可达成双表联查的目的,开发者可根据实际项目情况选取最合适的方案[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值