SQL查询加入不等于

问题描述 投票:-3回答:1

所以我有这个医院的关系模型(不是我做的)。患者(有地址和身份证),医院(有身份证和地址),还有一张关于代表医院就诊的关系表(hospital.id,patient.id)(还有其他表格,但他们没有这个问题中的问题);查询的目的是找到医院,其中没有来自其他城市的患者而不是医院的患者(条件是地址仅包含城市)。我的问题是理论上的,我真的不知道是否使用a或b null的完全外连接,或查询中找到包含“外国”患者的医院的其他东西,(如加入医院及其位置,然后完全外部联接与a或b表记录为null,但这导致一个问题,我将在查询中得到结果吗?因为我需要的城市不匹配,但该联接的所有解释都是关于。感谢所有拥抱我的人完全不完美的英语并理解它.UPS。患者:

id = 1,city = A;

id = 2,city = B;

id = 3,city = B;

id = 4,city = A;

id = 5,city = C;

医院:

Id = 1,城市= A.

id = 2,city = B;

放置:

还.IDP.ID

1 1

1 4

2 2

2 3

2 5

预期结果为“1”,第一家医院的ID(其他城市没有患者)和其他具有“特征”的人我的查询就像

从id不在的医院中选择id

(选择id,来自医院内部联接位置的地址h.id = placement.h.id作为b内联接患者位于placement.p.id = p.id其中hospital.address <> patient.address)抱歉延迟

Shawn的查询是否正确?我可以使用h.id代替1吗?如果我们的老师会接受这一点,那么,因为他从来没有向我们展示过这样的东西,并且在10年后他还没有设法为学生创建一个测试查询数据库的例子。

mysql sql
1个回答
0
投票
select * from hospitals h
where not exists (
    select 1 -- dummy value, use h.id if you prefer
    from patients p inner join placement pl on pl.pid = p.id
    where pl.hid = h.id and p.city <> h.city
)

要么

select h.id
from hospitals h
    left outer join
    placement pl inner join patients p on p.id = pl.pid
        on pl.hid = h.id
group by h.id
-- this won't count nulls resulting from zero placements for that hospital
-- as long as standard sql null comparisons are active
having count(case when h.city <> p.city then 1 end) = 0   

看起来它对我有用:http://rextester.com/BTJB59061

© www.soinside.com 2019 - 2024. All rights reserved.