我有5张桌子:
以下四个表格中的资料:
我要做的是确保所有出现在Ord、Comm、Ant和MRN表中的病人,并将其连接到Pat表中,以获取姓名、姓氏、性别、道布等信息.
因此,我试图找出如何最好地将这些表连接在一起,以确保不包括没有出现在Ord、Comm、Ant或MRN表中的病人。
如果我把这些表加入到我的主病人表中,用左边的外部连接,我将得到所有的病人,不管他们是否有订单、注释、抗原或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我试着用一个直观的图表来描述我要找的东西:

我的理想查询是返回除4和10以外的所有患者,因为他们没有任何订单、抗原、注释或MRN。
我在想,我可以在ORD、ANT、COMM和MRN表上执行完全的外部连接,然后获取这些结果并将其加入PAT表。
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表结合起来,这样我就可以得到我的病人信息了。
有什么想法?
发布于 2015-02-27 13:05:28
这不需要太复杂。
ORD、ANT、COMM和MRN不需要相互连接,因为您不需要它们中的任何记录来匹配其他记录。你只需要知道他们是否有特定病人的记录。
构建这样一个查询的方法有很多种;以下是一个方法:
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表而没有将它加入任何东西,所以您不必担心重复的记录,而且因为您只是在检查ORD、ANT、COMM和MRN的存在,所以您不必担心每个表为一个给定的病人到底有多少记录。
https://stackoverflow.com/questions/28746134
复制相似问题