首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用内部连接和完全外部连接的组合来获得所需的数据集

使用内部连接和完全外部连接的组合来获得所需的数据集
EN

Stack Overflow用户
提问于 2015-02-26 15:17:54
回答 1查看 51关注 0票数 0

我有5张桌子:

  • 病人表'PAT‘
  • 病人命令“秩序”
  • 耐心评论“Comm”
  • 病人抗原'Ant‘
  • 病人MRN

以下四个表格中的资料:

  • 帕特有我们所有的病人信息
  • Ord只拥有过去四年的订单,加入了Pat表中的病人ID。
  • Comm包含所有的病人评论,并在Pat表上加入病人ID
  • 蚂蚁把所有的抗原都输入到病人身上,在病人身份的Pat表上加入。
  • MRN有所有病人的病历号码,并在病人身份证上加入Pat表。

我要做的是确保所有出现在Ord、Comm、Ant和MRN表中的病人,并将其连接到Pat表中,以获取姓名、姓氏、性别、道布等信息.

因此,我试图找出如何最好地将这些表连接在一起,以确保不包括没有出现在Ord、Comm、Ant或MRN表中的病人。

如果我把这些表加入到我的主病人表中,用左边的外部连接,我将得到所有的病人,不管他们是否有订单、注释、抗原或MRN。

代码语言:javascript
复制
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

我试着用一个直观的图表来描述我要找的东西:

我的理想查询是返回除4和10以外的所有患者,因为他们没有任何订单、抗原、注释或MRN。

我在想,我可以在ORD、ANT、COMM和MRN表上执行完全的外部连接,然后获取这些结果并将其加入PAT表。

代码语言:javascript
复制
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表结合起来,这样我就可以得到我的病人信息了。

有什么想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-27 13:05:28

这不需要太复杂。

ORDANTCOMMMRN不需要相互连接,因为您不需要它们中的任何记录来匹配其他记录。你只需要知道他们是否有特定病人的记录。

构建这样一个查询的方法有很多种;以下是一个方法:

代码语言:javascript
复制
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表而没有将它加入任何东西,所以您不必担心重复的记录,而且因为您只是在检查ORDANTCOMMMRN的存在,所以您不必担心每个表为一个给定的病人到底有多少记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28746134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档