SQL Server 2008联接类型用于4个表

罗罗·托马西(Rolo Tomasi)

我有一个由MS Access中的同事创建的患者实验室数据库,该数据库有4个表。

表1包含患者人口统计信息(患者ID,性别,DOB等)

表2包含Type1(血压,心率)

表3包含Type2(化学成分,血红蛋白等)

表4包含Type3(微生物学培养结果)

每个表都有一个共同的内部患者编号。每种措施都可以彼此独立地采取,可能有结果也可能没有结果。我想要一个简单的表,该表提取仅在表1中找到的外部患者ID,性别和DOB,并结合其他每个表的结果的DATE。我尝试使用RIGHT联接,并期望在后续表中的日期不匹配时为“ null”值。相反,我得到的结果看起来像一个交叉表查询,并且每一行都有一个值。显然我无法正确理解JOINS的用法。这是我尝试的:

SET DATEFORMAT dmy
DECLARE @time time(0)

Select DISTINCT
P.PATIENT_ID as 'Patient ID',
P.SEX as 'Sex',
CONVERT(VARCHAR(11),P.DOB) as 'DOB',
CONVERT(VARCHAR,TYPE1.DateTime,101)as 'BP Measure DATES',
CONVERT(VARCHAR,TYPE2.DateTime,101) as 'CHEM Measure DATES',
CONVERT(VARCHAR,TYPE3.DateTime,101) as 'MICRO Measure DATES'
From dbo.PATIENT as P LEFT JOIN dbo.BRACHIALBPS as TYPE1 on P.PATIENT_NO=TYPE1.PATIENT_NO
Right Join dbo.Chemistries as TYPE2 on P.PATIENT_NO=TYPE2.PATIENT_NO
Right Join dbo.Microbiologies as TYPE3 on P.PATIENT_NO=TYPE3.PATIENT_NO
ORDER BY P.PATIENT_ID

我正在使用SQL Server 2008导入数据并执行查询。

正如我提到的那样,我希望每个患者/每个结果日期都有一行。但是对于每个日期组合,我都会得到多行。

在此先感谢您的指导!

用户2941651

请尝试以下版本的查询:

SET DATEFORMAT dmy
DECLARE @time time(0)

Select DISTINCT
    P.PATIENT_ID as 'Patient ID',
    P.SEX as 'Sex',
    CONVERT(VARCHAR(11),P.DOB) as 'DOB',
    CONVERT(VARCHAR,TYPE1.DateTime,101)as 'BP Measure DATES',
    CONVERT(VARCHAR,TYPE2.DateTime,101) as 'CHEM Measure DATES',
    CONVERT(VARCHAR,TYPE3.DateTime,101) as 'MICRO Measure DATES'
From 
    dbo.PATIENT as P 
    LEFT JOIN dbo.BRACHIALBPS as TYPE1 
        on P.PATIENT_NO=TYPE1.PATIENT_NO
    LEFT Join dbo.Chemistries as TYPE2 
        on P.PATIENT_NO=TYPE2.PATIENT_NO
    LEFT Join dbo.Microbiologies as TYPE3 
        on P.PATIENT_NO=TYPE3.PATIENT_NO
ORDER BY 
    P.PATIENT_ID

RIGHT联接被LEFT联接替换。

RIGHT JOIN dbo.BRACHIALBPS as TYPE1 on P.PATIENT_NO=TYPE1.PATIENT_NO查询中存在时,它“告诉”数据库服务器从dbo.BRACHIALBPS as TYPE1表中获取所有适用的(未筛选出的)行,并尝试在表中查找匹配的行dbo.PATIENT as P-如果未找到匹配项,则填写P带有NULL的特定结果记录的表格

使用LEFTdbo.PATIENT as P联接将确定优先级,因此联接过程中的行首先从该表中获取,然后尝试在左联接表中找到匹配项dbo.BRACHIALBPS as TYPE1同样,如果没有匹配项TYPE1,则查询结果中的“缺少字段”将填充为NULL。

SO上有一个有趣的线程,在其中非常详细地解释了JOINS,并从很多方面进行了解释-请查看:INNER和OUTER joins之间的区别

我希望我正确理解了这个问题,至少可以有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自联接SQL Server 2008中的表

来自分类Dev

SQL Server 2008查询-表联接

来自分类Dev

SQL Server:联接三个表

来自分类Dev

在SQL Server中联接2个表

来自分类Dev

在SQL Server中联接2个表

来自分类Dev

SQL Server左联接与3个表

来自分类Dev

SQL Server Pivot用于计数联接表中的实例

来自分类Dev

从联接SQL Server创建表

来自分类Dev

SQL Server跨表联接

来自分类Dev

SQL Server 2008中的循环联接

来自分类Dev

SQL Server 2008联接,联合,多项选择?

来自分类Dev

在SQL Server中联接两个表

来自分类Dev

在SQL Server上联接两个表

来自分类Dev

SQL Server:使用条件ON语句联接2个表

来自分类Dev

在sql-server中联接3个表

来自分类Dev

在SQL Server中联接两个表

来自分类Dev

在SQL Server上联接两个表

来自分类Dev

如何在SQL Server中联接三个表

来自分类Dev

SQL Server查询联接两个表

来自分类Dev

SQL Server 2008在2个表之间执行绘制

来自分类Dev

SQL Server 2008-从2个不同的表插入列

来自分类Dev

SQL Server 联接表和总和表

来自分类Dev

在SQL Server 2008中联接多个表会导致错误

来自分类Dev

如何在SQL Server 2008中将行更改为列(多个表,联接等)

来自分类Dev

根据SQL Server 2008中用户定义的参数联接表和groupby结果

来自分类Dev

SQL Server多表联接

来自分类Dev

SQL Server创建视图并联接表

来自分类Dev

在SQL Server中联接多个表

来自分类Dev

SQL Server中的条件表联接