Oracle连表查询

我有两张表,一张是户口表,一张是人员表;具体字段如下:

hk_tb(户口表)
——————————
hkid 主键
…… 一些其他的无关字段

ry_tb(人员表)
——————————
ryId 主键
ryName 姓名
ryGx 人员关系(是与户主的关系,就像户口本上的那样户主的话就是户主,)
status 状态(0或1)
hkid 与户口表关联
…… 一些其他的无关字段

一个户口可能有多个人,但一个人只能有一个户口。现在我要查询的是每个户口的信息,即一行一个户口,要显示的字段是 hkidryId(只要显示户主就可以了)count1count2。前两个字段是简单的,但是后两个字段,我需要显示的是这个户口里的所有人status0的数目(即count1)以及status1的数目(即count2)。这个SQL应该怎么写呀?

阅读 2.7k
1 个回答

不考虑性能的子查询的写法

select 
  hkid
  (select ryId from ry where ry.hkid = hk.hkid and ryGx = '户主' and rownum <=1) ryId,
  (select count(*) from ry where ry.hkid = hk.hkid and status = 0) count1,
  (select count(*) from ry where ry.hkid = hk.hkid and status = 1) count2,
from hk 

多表关联的写法

select * from hk left join (
  select *
  from (
    select 
      hkid,
      sum(decode(status,0,1,0) count1, 
      sum(decode(status,1,1,0) count2,
    from ry
    group by hkid
  ) t1 inner join (
    select 
      hkid2,
      max(ryId) 
    from ry 
    where ryGx = '户主'
    group by hkid
  ) t2 on t1.hkid = t2.hkid2
) t3 on hk.hkid = t3.hkid
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进