洞察探索open banking如何通过小程序容器技术助力金融企业实现数据安全和数字化转型
824
2022-10-26
在Mybatis中使用连表查询的一次实际应用
以前在工作中很少使用多表关联查询,对连表查询的具体作用和使用场景也没有很直观的认识,通过这次在项目中的实际应用,对此有了一定的认识,特记录如下。
关联表介绍:
分别是属性表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所对应的属性名称及属性值名称
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_nameFROM attr_info aiJOIN attr_val_info avi ON ai.attr_id = avi.attr_idJOIN 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的属性,用一行显示。
SELECT si.product_id, si.sku_id, si.sku_url, sai.color_id, sai.spec_idFROM sku_info siJOIN ( 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);
作者:翎野君
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~