Oracle连表查询

发布于 2022-09-05 09:27:35 字数 701 浏览 12 评论 0

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

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半山落雨半山空 2022-09-12 09:27:35

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

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文