结合使用 INNER 和 FULL OUTER 联接来获取所需的数据集
Using a Combination of INNER and FULL OUTER Joins to Get Desired Data Set
我有 5 个 Tables:
- 患者Table'PAT'
- 患者订单'ORD'
- 患者评论'Comm'
- 患者抗原'Ant'
- 患者 MRN 'MRN'
以下四个table中的信息:
- Pat 拥有我们所有患者的信息
- Ord 只有过去四年的订单,加入患者 ID table 上的 Pat
- Comm 有所有患者评论,加入了患者 ID table 上的 Pat
- Ant 已将所有抗原输入到患者身上,加入患者 ID table 上的 Pat
- MRN 拥有患者的所有病历编号,加入患者 ID table 上的 Pat
我正在尝试做的是确保我拥有所有出现在 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 结合,这样我就可以获得我的患者信息。
想法?
这不必太复杂。
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
table 而没有将其加入任何内容,所以您不必担心重复记录,并且因为您只是检查 [=11= 是否存在]、ANT
、COMM
和 MRN
,您不必担心每个给定患者的确切记录数。
我有 5 个 Tables:
- 患者Table'PAT'
- 患者订单'ORD'
- 患者评论'Comm'
- 患者抗原'Ant'
- 患者 MRN 'MRN'
以下四个table中的信息:
- Pat 拥有我们所有患者的信息
- Ord 只有过去四年的订单,加入患者 ID table 上的 Pat
- Comm 有所有患者评论,加入了患者 ID table 上的 Pat
- Ant 已将所有抗原输入到患者身上,加入患者 ID table 上的 Pat
- MRN 拥有患者的所有病历编号,加入患者 ID table 上的 Pat
我正在尝试做的是确保我拥有所有出现在 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 结合,这样我就可以获得我的患者信息。
想法?
这不必太复杂。
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
table 而没有将其加入任何内容,所以您不必担心重复记录,并且因为您只是检查 [=11= 是否存在]、ANT
、COMM
和 MRN
,您不必担心每个给定患者的确切记录数。