sql语句 - Oracle连表查询

查看:278
本文介绍了sql语句 - Oracle连表查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

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

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

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

解决方案

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

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

这篇关于sql语句 - Oracle连表查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆