结合使用 INNER 和 FULL OUTER 联接来获取所需的数据集

Using a Combination of INNER and FULL OUTER Joins to Get Desired Data Set

我有 5 个 Tables:

以下四个table中的信息:

我正在尝试做的是确保我拥有所有出现在 Ord、Comm、Ant 和 MRN table 中的患者,并将其加入 Pat table 以获取名字、姓氏、性别、出生日期等信息...

所以我想弄清楚如何最好地将这些 table 连接在一起,以确保我不包括未出现在 Ord、Comm、Ant 或 MRN 中的患者 tables.

如果我使用左外部连接将 tables 连接到我的主要患者 table,我将获得所有患者,无论他们是否有订单、评论、抗原或 MRN。

Select * from Pat
Left Outer Join Ord on Pat.X=Ord.X
Left Outer Join Comm on Pat.X=Comm.X
Left Outer Join Ant on Pat.X=Ant.X
Left Outer Join MRN on Pat.X=MRN.X

我试图制作一张我正在寻找的东西的可视化图表:

我的理想查询是 return 除了 4 和 10 之外的所有患者,因为他们没有任何订单、抗原、评论或 MRN。

我想我可以在 ORD、ANT、COMM 和 MRN table 上执行 FULL OUTER JOINS,然后将这些结果加入 PAT table。

Select *
FROM P50DATA.AGABFL1 ANT
FULL OUTER JOIN P50DATA.ORDMSTL1 ORD ON ANT.AGACCT=ORD.OPACCT
FULL OUTER JOIN P50DATA.DCMTRNL5 COMM ON ANT.AGACCT=COMM.DCACCT
FULL OUTER JOIN P50DATA.HOSPIDL1 HOS ON ANT.AGACCT=HOS.APACCT

但我不知道如何获取此数据集并将其与 Pat table 结合,这样我就可以获得我的患者信息。

想法?

这不必太复杂。

ORDANTCOMMMRN 不必相互连接,因为您不需要任何一个中的记录他们中的任何一个都可以匹配。您只需要知道他们是否有给定患者的记录。

构造这种查询的方法有很多种;这是一个:

SELECT   *
FROM     PAT
WHERE    EXISTS (
     SELECT  1
     FROM    ORD
     WHERE   ORD.X = PAT.X
     )
   OR    EXISTS (
     SELECT  1
     FROM    ANT
     WHERE   ANT.X = PAT.X
     )
   OR    EXISTS (
     SELECT  1
     FROM    COMM
     WHERE   COMM.X = PAT.X
     )
   OR    EXISTS (
     SELECT  1
     FROM    MRN
     WHERE   MRN.X = PAT.X
    )

因为您正在查询 Patient table 而没有将其加入任何内容,所以您不必担心重复记录,并且因为您只是检查 [=11= 是否存在]、ANTCOMMMRN,您不必担心每个给定患者的确切记录数。