2013-04-05 97 views
0

我想从4个表中检索数据。 Patient表具有id作为PK是其他三个表中的外键ett,pharssc。如果病人只在一个类别中。即患者id pt1存在于3个表中的任一个中。现在我想检索患者信息及其相关类别。我想从SQL Server中的4个表中检索数据

我的查询是:

SELECT * 
FROM Patient p 
INNER JOIN ETT t 
ON p.Patient_ID = t.Patient_ID || INNER JOIN Pharmacological ph 
ON p.Patient_ID = ph.Patient_ID 

我用OR子句,因为我只想要1内连接在同一时间执行。但它不给我结果,有什么建议?

+0

你的意思是,病人的ID可以在一个只存在'ett','phar','ssc'中的表? – 2013-04-05 13:42:26

+0

哪个表需要加入Patinet,哪种情况? – 2013-04-05 13:42:26

回答

0

对于或 - 不要ise ||,请使用“或” 您无法使用或加入,您需要重新格式化您的查询。

2

....病人表具有ID作为PK这是在其他三个 表名称外键:ETT药业SSC其中患者躺在只有一个 类别 。例如,患者编号pt1存在于3个表中的任一个中。

根据您的说法,您可以加入所有表Patient使用LEFT JOIN表,因为记录只能在一个表中。下面的查询使用COALESCE,它返回第一个非空值与int列表。

您需要的唯一手动操作是手动指定想要在列表中显示的列名称,如下所示。

SELECT a.*, 
     COALESCE(t.colA, p.ColA, s.ColA) ColA, 
     COALESCE(t.colB, p.ColB, s.ColB) ColB, 
     COALESCE(t.colN, p.ColN, s.ColN) ColN 
FROM Patient a 
     LEFT JOIN ETT t 
      ON a.Patient_ID = t.Patient_ID 
     LEFT JOIN Phar p 
      ON a.Patient_ID = p.Patient_ID 
     LEFT JOIN SSC s 
      ON a.Patient_ID = s.Patient_ID 

为了进一步获得更多的知识有关加入,请访问以下链接:

相关问题