oracle多表连接,其中有个表数据需要去重只取第一条


-- Create table
create table T110JQ
(
  JQNO    varchar2(20) not null,
  JQCHARA varchar2(20),
  JQXZDM  varchar2(20),
  SSDW    varchar2(20),
  BJTYPE02. varchar2(20)
)
;
-- Create/Recreate primary, unique and foreign key constraints
alter table T110JQ
  add constraint JQNO primary key (JQNO);
 ==============================================================================
-- Create table
create table TJQXZDM
(
  JQXZCODE    varchar2(20) not null,
  BZJQXZDM  varchar2(20)
)
;
-- Create/Recreate primary, unique and foreign key constraints
alter table TJQXZDM
  add constraint JQXZCODE primary key (JQXZCODE);
==============================================================================
-- Create table
create table JL
(
  DWCODE    varchar2(20) not null,
  BZDWCODE  varchar2(20),
  BZDWNAME  varchar2(20)
)
;
-- Create/Recreate primary, unique and foreign key constraints
alter table JL
  add constraint DWCODE primary key (DWCODE);
============================================================================== 
T110JQ表数据
 JQNO JQCHARA JQXZDM SSDW BJTYPE
1 1 刑事案件 1001 445821 亲临
2 2 行政案件 1002 445822 亲临
3 3 民事案件 1003 445823 亲临
4 4 行政案件 1004 445821 亲临

TJQXZDM表数据
    JQXZCODE BZJQXZDM
1 5 1001
2 6 1002
3 7 1003
4 8 1004

JL表数据
    DWCODE BZDWCODE BZDWNAME
1 9 445821 芙蓉区分局
2 10 445821 万家丽派出所
3 11 445821 马王堆派出所
4 12 445822 天心区分局
5 13 445823 下河街派出所
6 14 445823 开福区派出所

 

 

========================================================

不去重的语句:

 select t.jqno,t.*,z.* ,f.*
from T110JQ t,TJQXZDM z ,JL f
where t.jqxzdm=z.bzjqxzdm and f.bzdwcode=t.ssdw and t.bjtype='亲临' order by t.jqno DESC
得出的结果是:

    JQNO JQNO JQCHARA JQXZDM SSDW BJTYPE JQXZCODE BZJQXZDM DWCODE BZDWCODE BZDWNAME
1 4 4 行政案件 1004 445821 亲临 8 1004 9 445821 芙蓉区分局
2 4 4 行政案件 1004 445821 亲临 8 1004 11 445821 马王堆派出所
3 4 4 行政案件 1004 445821 亲临 8 1004 10 445821 万家丽派出所
4 3 3 民事案件 1003 445823 亲临 7 1003 14 445823 开福区派出所
5 3 3 民事案件 1003 445823 亲临 7 1003 13 445823 下河街派出所
6 2 2 行政案件 1002 445822 亲临 6 1002 12 445822 天心区分局
7 1 1 刑事案件 1001 445821 亲临 5 1001 10 445821 万家丽派出所
8 1 1 刑事案件 1001 445821 亲临 5 1001 11 445821 马王堆派出所
9 1 1 刑事案件 1001 445821 亲临 5 1001 9 445821 芙蓉区分局

 

 

去重处理的语句:

select t.jqno,t.*,z.*,f.* from T110JQ t,TJQXZDM z,
(select * from (select rank() over(partition by bzdwcode order by dwcode desc) r,a.* from jl a) where r=1) f
 where t.jqxzdm=z.bzjqxzdm and 1=1 and t.bjtype='亲临' and t.ssdw=f.bzdwcode

结果:

1 4 4 行政案件 1004 445821 亲临 8 1004 1 9 445821 芙蓉区分局
2 1 1 刑事案件 1001 445821 亲临 5 1001 1 9 445821 芙蓉区分局
3 2 2 行政案件 1002 445822 亲临 6 1002 1 12 445822 天心区分局
4 3 3 民事案件 1003 445823 亲临 7 1003 1 14 445823 开福区派出所

 

总结关键是JL表的去重,只取第一条语句:
(select * from (select rank() over(partition by bzdwcode order by dwcode desc) r,a.* from jl a) where r=1) f

你可能感兴趣的:(database,oracle)