多表联查2种思路

数据库:

user表字段 id name deptId;

dept表字段 id name

 

一、用left join的方式写sql

 select * from user u left join dept d on u.deptId = d.id

# 这里的*是为了省事,最好是写成需要的字段名,好处是可以起别名,提升效率,另外可以避免如果两种表里都有name这个字段的情况下,数据传输出现问题,亲身体验过!

二、分两次查询,在java里处理逻辑

 List<User> lus = userMapper.selectList(null);
 List<Dept> lds = deptMapper.selectList(null);
 for (User user : lus){
     for (Dept dept : lds){
         if (dept.id==user.getDeptId){
             user.setDeptName = dept.getName;
        }
    }
 }
 ?

总结: 推荐使用第二种,因为第一种比较消耗系统资源,联查的表越多效率越低,比如15-20张表,20万的数据量,方式一的时间大概要5-10分钟,方式二虽然写着麻烦但是效率高,可以用多线程的方式进行查询,即使不用也就几秒钟,上百万的数据量更能体现优势,数据量小的话是看不出差别的,外包经常会先用方式一去做,然后客户觉得效率低,那就花钱升级配置,其实只需要改写成方式二。

江湖套路深,别光想着回农村,多学习,多分享!

 

多表联查2种思路

上一篇:poj 1799(水题)


下一篇:阿里云服务:阿里云专家服务介绍