mysql多表关联一对多查询,取最新关联对应的数据

业务查询sql ,这个是在mybatis xml 中的

 SELECT
            sr.id,
            sr.code,
            sr.remark ,
            sr.create_by,
            sr.create_time,
            sr.state,
            (
                SELECT COUNT(a.storage_record_id)
                FROM sjy_mes_storage_record_detail a  
                WHERE a.deleted = 0
                  AND a.storage_record_id = sr.id
            ) AS number, -- 统计关联表的所有数据
            po_subquery.code as productionOrderCode,
            po_subquery.name as lineWarehouseName,
            po_subquery.product_id
        FROM
            sjy_mes_storage_record sr --这个是主表信息 可以替换自己想要的
                inner JOIN ( -- 这个有个问题如果是用 left join 查询相当于扫描全表,会造成性能下降改成inner join 只查对应交集得数据,这样就不会有 但是数据多也是会 
                SELECT wopc.product_code, po.id, po.code, po.product_id, po.line_warehouse_id, lw.name
                FROM sjy_mes_work_order_product_code wopc
                         LEFT JOIN sjy_mes_work_order wo ON wopc.work_order_id = wo.id AND wo.deleted = 0
                         LEFT JOIN sjy_mes_production_order po ON wo.production_order_id = po.id AND po.deleted = 0
                         LEFT JOIN sjy_mes_line_warehouse lw ON po.line_warehouse_id = lw.id AND lw.deleted = 0
                WHERE wopc.deleted = 0
            ) po_subquery ON ( SELECT srd.product_code -- 根据关联表获取最新数据的信息和需要的数据做关联(比如你需要什么数据就和什么数据关联,前提是必须是按主表查询,主表中能找到唯一的数据)
                               FROM sjy_mes_storage_record_detail srd
                               WHERE srd.deleted = 0
                                 AND srd.storage_record_id = sr.id
                               ORDER BY srd.id DESC
                               LIMIT 1) = po_subquery.product_code
        WHERE
            sr.deleted = 0
        <if test="storageRecordProductVO.state != null and storageRecordProductVO.state != ''">
            and sr.state = #{storageRecordProductVO.state}
        </if>
        <if test="storageRecordProductVO.code != null and storageRecordProductVO.code != ''">
            and sr.code like concat('%',#{storageRecordProductVO.code},'%')
        </if>
        ORDER BY
            sr.id DESC

欢迎大家有更好得查询方法,工作记录中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值