AleftjoinBB表有多条记录,max(create_time)取最新⼀条例如:A表合同表t_contract  B表合同审核表t_contract_audit。两个表根据contract_id关联。且⼀条合同有多条审核记录。求:A.合同状态、B.最新审核记录结果。
简单:A 1--key--n B  ---》A.*+B.*。
⽅案1:
A作为主表单独查询,遍历list, 查询每⼀个合同对应的B表,按照创建时间倒序取第⼀条。
性能:
多表left join
如果是分页查询,⽐如⼀页10条,此⽅案分两步,思路清晰,SQL简单,不会出现”⼤数据量的多表关联慢查询“。
⽅案2:
1)处理B表,按照contract_id只保留创建时间最新的⼀条。(当然⼦查询也可以,个⼈认为不如inner join 好理解)
SELECT
a.*
FROM
t_contract_audit a
INNER JOIN ( SELECT contract_id, max( create_time ) create_time FROM t_contract_audit GROUP BY contract_id ) b act_id = b.contract_id
ate_time = b.create_time
2)把第⼀步处理结果作为R表:select A.*,R.* from A left join R act_act_id
SELECT
h.*,r.*
FROM
t_contract h
left JOIN (SELECT a.*FROM t_contract_audit a
  INNER JOIN ( SELECT contract_id, max( create_time ) create_time FROM t_contract_audit
  GROUP BY contract_id ) b act_id = b.contract_id
  ate_time = b.create_time
) r
act_id = r.contract_id
where h.sale_id=2702
act_status IN (8,9)
order ate_time desc
性能:
⼀条SQL搞定,有⼀定SQL复杂度,且如果表数量级⼤,有风险!最好⾃⼰在从库测试⼀下性能。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。