我在一个Access数据库中有三个表,我通过ucanaccess在java中使用它。
Patients (PK Pt_ID)
Endoscopy (PK Endo_ID, FK Pt_ID)
Histology (PK Histol_ID, FK Pt_ID)1名患者可以有多个内窥镜检查1名患者可以有多个组织学内镜检查和组织学检查无关
我希望在一个SQL查询中检索单个患者的所有内窥镜和组织学信息。虽然我可以为两个表编写select语句,但我不知道如何跨这三个表执行此操作。是这样的吗?
Select *.Endoscopy,*.Histology from Patients INNER JOIN Endoscopy, Histology ON Patient.Pt_Id=Endoscopy.Pt_ID, Patient.Pt_Id=Histology.Pt_ID我敢肯定那肯定是一团糟...
发布于 2016-06-11 01:34:56
如果您有多个Endoscopy记录或同一个Patient的多个Histology记录,那么您将在选择中收到重复/重复的记录。我认为除非你使用2个SELECT语句而不是1个,否则没有办法解决这个问题。
SELECT Endoscopy.*, Histology.*
FROM Patients
INNER JOIN Endoscopy ON Patients.Pt_Id = Endoscopy.Pt_ID
INNER JOIN Histology ON Patients.Pt_Id = Histology.Pt_ID若要选择某个表上的所有记录,请在select its table name/table alias .*
INNER JOIN中选择记录,如果其中一个表不包含包含在其他任何一个表中的记录,则将不会显示带有该Pt_ID
Patients (带S)和Patient (无S),请确保您使用了正确的名称。我猜可能是它的Patient.
而不是Patients
这条语句的作用与上面的几乎相同,但是使用了左连接语法,这样即使两个表中的一个没有患者的记录,也会始终获得这两个表的记录。
SELECT Endoscopy.*, Histology.*
FROM Patients
LEFT JOIN Endoscopy ON Patients.Pt_Id = Endoscopy.Pt_ID
LEFT JOIN Histology ON Patients.Pt_Id = Histology.Pt_ID
WHERE Histology.Histol_ID IS NOT NULL OR Endoscopy.Endo_ID IS NOT NULL添加的WHERE子句确保您不会获得具有所有NULL值的记录,其中有一个患者,但在这两个表中都没有记录。
发布于 2016-06-11 01:35:11
您使用的是哪种SQL DB?
我相信这在大多数情况下都是有效的。
SELECT * FROM Patients, Endoscopy, Histology
WHERE Patient.Pt_Id=Endoscopy.Pt_ID
AND Patient.Pt_Id=Histology.Pt_ID此外,我相信如果您需要使用应该是Endoscopy.*, Histology.*的话,您已经将这些转换到了*.Endoscopy,*.Histology中
发布于 2016-06-11 01:41:40
您可以使用以下查询来选择内窥镜和组织学:
SELECT p.Pt_ID
, e.Endo_ID
, h.Histol_ID
FROM Patients p
INNER JOIN Endoscopy e ON p.Pt_Id = e.Pt_ID
INNER JOIN Histology h ON p.Pt_Id = h.Pt_ID但我不确定这真的是你想要的。您可能需要将表Patients、Endoscopy和Histology映射到Java类中?在这种情况下,您可以考虑Java Persistence API (JPA)。它可以帮助您在java代码中处理这些表。这是一个JPA Quick Guide。
https://stackoverflow.com/questions/37753892
复制相似问题