sql语句 - Oracle连表查询
本文介绍了sql语句 - Oracle连表查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
我有两张表,一张是户口表,一张是人员表;具体字段如下:
hk_tb
(户口表)
——————————hkid
主键
…… 一些其他的无关字段
ry_tb
(人员表)
——————————ryId
主键ryName
姓名ryGx
人员关系(是与户主的关系,就像户口本上的那样户主的话就是户主
,)status
状态(0或1)hkid
与户口表关联
…… 一些其他的无关字段
一个户口可能有多个人,但一个人只能有一个户口。现在我要查询的是每个户口的信息,即一行一个户口,要显示的字段是 hkid
、ryId(只要显示户主就可以了)
、count1
、count2
。前两个字段是简单的,但是后两个字段,我需要显示的是这个户口里的所有人status
为0
的数目(即count1
)以及status
为1
的数目(即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屋!
查看全文