gpt4 book ai didi

sql - 从多个表中获取数据

转载 作者:行者123 更新时间:2023-12-01 11:00:12 24 4
gpt4 key购买 nike

医学硕士

       MedicalID MedicalName
1(pk) abc
2 xyx
3 pqr

Child_Medical_Master

       ChildMID MedicalID Station Name
1(pk) 1(fk) bnb mfk
2 1 def rwr
3 2 re wrw

就诊

       VTID  PMID  RFMID age
1(pk) 2(fk) 1 34
2 2 3 45
3 3 1 45
4 1 2 44
5 2 2 76

医学研究

       UID   VTID  ChildMID SMID   Date  time 
1(pk) 1(fk) 1 1 kk jdj
2 2 3 2 kdf lfl
6 3 2 3 rgr rtr

博士_硕士

       RFMID  Doctorname
1(pk) mr.john
2 mr.jack
3 mr.jim

PAtient_Master

       PMID   Firstname LastNAme
1(pk) df ere
2 rwe rwer
3 rwr fwr

Study_Master

       SMID   MedicalID Description Duration
1(pk) 1(fk) fdf efe
2 1 ddf dfdf
3 2 df ef

我想要表中的这些列,我的正确查询应该如何?

UID,PMID,FIRSTNAME,LASTNAME,AGE,MEDICALNAME,DESCRIPTION,STATION,DATE,DoctorName

我已经在 7 个表上使用了内部连接,但没有得到正确的数据。(Doctorname 重复)

最佳答案

虽然我不确切知道您想要的最终结果是什么,但下面的查询和解释可能有助于解决您的问题。拥有额外的示例数据和您想要的结果示例会有所帮助,但这是我的尝试。

我从一个较小的查询开始,并设法添加表。第一个查询,这不会为您提供大量数据,但会为您提供最终产品的 ChildMIDMedicalIdStation。您需要 ChildMIDMedicalId 来加入更多表。 ( SQL Fiddle ):

SELECT *
FROM Medical_Master mm
INNER JOIN Child_medical_Master cmm
ON mm.MedicalID = cmm.MedicalId

我在下一个表中添加了 Medical_Study 表连接到 ChildMID 上,您刚刚从之前的连接中获得该表。这将为您提供最终产品 ( SQL Fiddle) 中的 UID

SELECT *
FROM Medical_Master mm
INNER JOIN Child_medical_Master cmm
ON mm.MedicalID = cmm.MedicalId
INNER JOIN Medical_Study ms
ON cmm.ChildMID = ms.ChildMID

在下一个连接中,我添加了 Study_Master 表。在这里我做了一些稍微不同的事情,因为我在两个不同的字段上加入了表格。对于此查询,我加入了 SMID 字段以验证研究是否正确,但我也加入了 MedicalID 字段以确保它使用的是正确的医疗记录. (请参阅 SQL Fiddle)如果您不加入这两个字段,那么您将获得 Medical_Study 中每个项目的一条记录,但您似乎想要 Study 和 Medical 都匹配的项目.

SELECT *
FROM Medical_Master mm
INNER JOIN Child_medical_Master cmm
ON mm.MedicalID = cmm.MedicalId
INNER JOIN Medical_Study ms
ON cmm.ChildMID = ms.ChildMID
INNER JOIN Study_Master sm
ON ms.SMID = sm.SMID
AND mm.MedicalID = sm.MedicalID -- results change if you remove this line

下一个查询要简单一些,因为您要添加 Medical_VisitPatient_Master。 (SQL Fiddle)

SELECT *
FROM Medical_Master mm
INNER JOIN Child_medical_Master cmm
ON mm.MedicalID = cmm.MedicalId
INNER JOIN Medical_Study ms
ON cmm.ChildMID = ms.ChildMID
INNER JOIN Study_Master sm
ON ms.SMID = sm.SMID
AND mm.MedicalID = sm.MedicalID
INNER JOIN Medical_Visit mv
ON ms.VTID = mv.VTID
INNER JOIN Patient_Master pm
ON mv.PMID = pm.PMID

要添加的最后一个表是 Doctor_Master,它将为您提供医生的名字。 ( SQL Fiddle ) 使用在添加 Doctor_Master 表之前提供的示例数据,您有一条记录,但最终得到 3 条记录。这是因为 PMID 曾在某个时候看过所有 3 位医生。

SELECT *
FROM Medical_Master mm
INNER JOIN Child_medical_Master cmm
ON mm.MedicalID = cmm.MedicalId
INNER JOIN Medical_Study ms
ON cmm.ChildMID = ms.ChildMID
INNER JOIN Study_Master sm
ON ms.SMID = sm.SMID
AND mm.MedicalID = sm.MedicalID
INNER JOIN Medical_Visit mv
ON ms.VTID = mv.VTID
INNER JOIN Patient_Master pm
ON mv.PMID = pm.PMID
INNER JOIN Doctor_Master dm
ON mv.RFMID = dm.RFMID

删除所有你不想要的字段最终查询是:

SELECT ms.UID,
pm.PMID,
pm.firstname,
pm.lastname,
mv.age,
mm.medicalname,
sm.description,
cmm.station,
ms.[date],
dm.doctorname
FROM Medical_Master mm
INNER JOIN Child_medical_Master cmm
ON mm.MedicalID = cmm.MedicalId
INNER JOIN Medical_Study ms
ON cmm.ChildMID = ms.ChildMID
INNER JOIN Study_Master sm
ON ms.SMID = sm.SMID
AND mm.MedicalID = sm.MedicalID
INNER JOIN Medical_Visit mv
ON ms.VTID = mv.VTID
INNER JOIN Patient_Master pm
ON mv.PMID = pm.PMID
INNER JOIN Doctor_Master dm
ON mv.RFMID = dm.RFMID

我认为这会产生您正在寻找的结果。

关于sql - 从多个表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11738574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com