日期:2014-05-17  浏览次数:20973 次

有点难度的SQL,如何查找能做全部检查项目的医院
有3个表

1,CS表-保存检查项目信息
检查项目编号   Varchar(3)
检查项目名       Varchar(50)

2,HOSP表-保存医院信息
医院编号     Varchar(3)
医院名         Varchar(50)

3,CSHP表-保存各个医院能够做的检查项目
医院编号     Varchar(3)
检查项目编号   Varchar(3)

现在需要查找能够做CS表中所有检查项目的医院的名字,要求用1条SQL语句
数据量不大,不用过分追求效率。(各表纪录数约   20,100,1500)




------解决方案--------------------
1: CS <table>
proId,proName

2: HOSP <table>
hospId,hospName

3: CSHP <table>
hospId,proId

=========================sql====================

select h.hospName
from HOSP h,
CSHP c,
(
select count(*) cs_count from CS
)cs
where c.hospId = h.hospId
group by c.hospId
having count(*) = cs_count;

------解决方案--------------------
SELECT t2.医院名,t1.检查项目名
FROM CS t1
LEFT OUTER JOIN CSHP t2 ON t1.检查项目编号 = t2.检查项目编号
LEFT OUTER JOIN HOSP t3 ON t2.医院编号 = t3.医院编号
------解决方案--------------------
select cs.检查项目编号, cs.检查项目名, hosp.医院编号, hosp.医院名
from cs, cshp, hosp
where cs.检查项目编号=cshp.检查项目编号(+) and cshp.医院编号=hosp.医院编号(+)