前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Mybatis中使用连表查询的一次实际应用

在Mybatis中使用连表查询的一次实际应用

作者头像
翎野君
发布2023-05-12 20:00:12
3370
发布2023-05-12 20:00:12
举报
文章被收录于专栏:翎野君翎野君

以前在工作中很少使用多表关联查询,对连表查询的具体作用和使用场景也没有很直观的认识,通过这次在项目中的实际应用,对此有了一定的认识,特记录如下。

关联表介绍:

分别是属性表attr_info、属性值表attr_val_info、商品sku信息表sku_info、商品sku所属的属性信息表sku_attr_info。

attr_info表:存储属性大类信息,如颜色、配置、网络

attr_val_info表:存储属性的具体值,如颜色-黄色、配置-128G、网络-移动、联通

sku_info表:存储sku的基础信息

sku_attr_info:存储sku对应的属性及属性值信息

业务场景一:

查询出每个sku所对应的属性名称及属性值名称

代码语言:javascript
复制
SELECT DISTINCT
	sai.product_id AS product_id,
	sai.attr_id AS attr_id,
	ai. attr_name,
	sai.attr_val_id AS attr_val_id,
	sai.attr_val_name AS attr_val_name
FROM
	attr_info ai
JOIN attr_val_info avi ON ai.attr_id = avi.attr_id
JOIN sku_attr_info sai ON (
	sai.product_id = avi.product_id
	AND sai.attr_val_id = avi.attr_val_id
)

将这三张表中的记录在业务代码中全部查询出来,然后在代码中编写拆装拼接逻辑到一个model中,这样费时费力不好把握各个表之间的关联关系而且逻辑不清晰,很容易出错。

连表查询就相当于将表记录之间的关联逻辑由代码层面,迁移至数据库层面,在数据库中通过关联查询语句查找到满足关联条件的数据集合,在业务代码中只需要对此查询集合进行where条件查询即可。 

业务场景二:

在原有的sku_attr_info表中,一个sku的属性信息对应一行记录,每个sku包含多个属性,即多行记录,现在想查询出sku所对应的颜色id和配置id以及其他的sku的属性,用一行显示。

代码语言:javascript
复制
SELECT
	si.product_id,
	si.sku_id,
	si.sku_url,
	sai.color_id,
	sai.spec_id
FROM
	sku_info si
JOIN (
	SELECT
		sku_id,
		MAX(
			CASE attr_id
			WHEN 1 THEN
				attr_val_id
			ELSE
				0
			END
		) color_id,
		MAX(
			CASE attr_id
			WHEN 2 THEN
				attr_val_id
			ELSE
				0
			END
		) spec_id
	FROM
		sku_attr_info
	GROUP BY
		sku_id
) sai ON (
	si.sku_id = sai.sku_id
);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关联表介绍:
  • 业务场景一:
  • 业务场景二:
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档