Oracle中两个表相关联的数据去重
<1>案件表tb_case(title:案件标题,detail:案件的介绍)idtitledetail1标题1详情12标题2详情2<2>案件处理的每步流程表tb_proc...
<1>案件表tb_case(title:案件标题,detail:案件的介绍)
id title detail
1 标题1 详情1
2 标题2 详情2
<2>案件处理的每步流程表tb_process(name:流程名,num:流程步骤,pid:属于哪个案件)
id name num pid
1 流程1 1 1
2 流程2 2 1
3 流程1 1 2
4 流程2 2 2
问题:根据主表的ID,和子表的pid相关联,查询出来的结果是,<<主表的字段信息+子表中num最大的那条信息(包括子表的所有的字段)>>
,这该怎么去查询?直接关联查询的话肯定有重复的,会把所有的信息都查询出来,会有4个结果,但是最终的结果只想要2条关联的数据, 该怎么写sql? 展开
id title detail
1 标题1 详情1
2 标题2 详情2
<2>案件处理的每步流程表tb_process(name:流程名,num:流程步骤,pid:属于哪个案件)
id name num pid
1 流程1 1 1
2 流程2 2 1
3 流程1 1 2
4 流程2 2 2
问题:根据主表的ID,和子表的pid相关联,查询出来的结果是,<<主表的字段信息+子表中num最大的那条信息(包括子表的所有的字段)>>
,这该怎么去查询?直接关联查询的话肯定有重复的,会把所有的信息都查询出来,会有4个结果,但是最终的结果只想要2条关联的数据, 该怎么写sql? 展开
1个回答
展开全部
with p as (
select t1.id,t1.content,t1.process_name,t1.pid, t1.process_num from (
select t.*, row_number() over(partition by t.pid order by t.process_num desc ) ord
tb_process t ) t1 where ord =1)
select c.*,p.* from tb_case c,p where c.id=p.pid;
--请采纳
追问
还有别的方式吗?或者解释下语法的意思,能运行起来,结果也对,可是不知道with写前面的意思是??
追答
with name as() 意思是将 as 后的查询结果当做一个结果集来用,名字为name,就这么简单,with as 的作用是 让整个语句结构看起来清晰点。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询