问大家一个SQL,两个表联查,一对多,多的取最新记录

wingson_shen 2013-11-21 09:32:55
表假设是这样的
t_product

id name
——————————————————
1 p_name_1
2 p_name_2
3 p_name_3
4 p_name_4


t_record

id pid count
————————————————
1 1 5
2 2 5
3 4 40
4 4 45
5 2 2
6 2 1
7 4 35
8 4 20


有两个这样的表,主表t_product(产品表),子表t_record(出库记录表,pid为t_product的外键),我要查主表的数据出来,
顺便把最新的出库记录数量(MAX(ID))查出来,如果没出库记录,则为空,不影响主表显示
效果如:

pid pname lastClunt
——————————————————
1 p_name_1 5
2 p_name_2 1
3 p_name_3
4 p_name_4 20


这样的情况要怎么写这个SQL
——————————————————
制表符都乱了
...全文
1041 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuzhangyao 2013-11-21
  • 打赏
  • 举报
回复
select t1.id, t1.name, max(t2.count) max_count from t_product t1 left join t_record t2 on t1.id = t2.pid group by t1.id, t1.name
wingson_shen 2013-11-21
  • 打赏
  • 举报
回复
谢谢各位的解答。
LengYueFengCai 2013-11-21
  • 打赏
  • 举报
回复
正如楼上++
NIan_jun 2013-11-21
  • 打赏
  • 举报
回复
with t_product as
 (
  
  select 1 id, 'p_name_1' name
    from dual
  union
  select 2 id, 'p_name_2' name
    from dual
  union
  select 3 id, 'p_name_3' name from dual),
t_record as
 (select 1 id, 1 pid, 5 count
    from dual
  union
  select 2 id, 1 pid, 6 count
    from dual
  union
  select 3 id, 2 pid, 7 count from dual)

select a.id, a.name, b.count
  from t_product a,
       (select pid, max(count) KEEP(DENSE_RANK FIRST ORDER BY id desc) count
          from t_record
         group by pid) b
 where a.id = b.pid(+)
CT_LXL 2013-11-21
  • 打赏
  • 举报
回复
SELECT T1.*, T2.COUNT
  FROM T_PRODUCT T1,
       (SELECT T1.PID, T1.COUNT
          FROM T_RECORD T1,
               (SELECT MAX(T.ID) ID, T.PID FROM T_RECORD T GROUP BY T.PID) T2
         WHERE T1.ID = T2.ID
           AND T1.PID = T2.PID) T2
 WHERE T1.ID = T2.PID(+)

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧