MS Access中的完全外部联接

时间:2015-06-02 16:45:12

标签: ms-access

我的情况:我有一个中央PI表(患者信息),用于存储数据库中的每个患者。然后我还有一些其他表格(例如生命体征,自我报告分数等)。问题是,并非每个患者都在每个表中完成测量。即,患者可能在生命体征表中有一个条目,但在自我报告表中没有。如何运行查询,其中显示PI表中的所有患者及其相应的生命体征和SR数据(如果存在),而不是将查询限制为仅显示在所有这三个表中都有记录的患者?

2 个答案:

答案 0 :(得分:2)

我不清楚你为什么要FULL OUTER JOIN

您有一个 PI表,其中包含每位患者的一行。您有另一个表,如 SR数据,其中包含这些患者的自我报告数据。假设他们有一个共同的密钥...也许是 patient_id ... LEFT JOIN将为每位患者提供一行,无论是否有 SR数据适用于该患者:

SELECT *
FROM
    [PI table] AS pi
    LEFT OUTER JOIN [SR Data] AS sr
    ON pi.patient_id = sr.patient_id;

注意访问权限会对LEFT OUTER JOINLEFT JOIN感到满意。不需要OUTER,但如果包含Access,Access将不会成为对象。

所以我认为你只需要一个LEFT JOIN。如果 SR数据包含的行与 PI表中的任何现有患者不匹配,则只需要{相当于} FULL OUTER JOIN 并且您希望查询结果中包含那些不匹配的行。但是你并没有表明这适用于你的问题,所以除非你告诉我们,否则我会把它排除在外。

你可以LEFT JOIN另一个表到第一个查询......

SELECT *
FROM
    ([PI table] AS pi
    LEFT OUTER JOIN [SR Data] AS sr
    ON pi.patient_id = sr.patient_id)
    LEFT JOIN [Vital Signs] AS v
    ON pi.patient_id = v.patient_id;

...并根据需要从那里扩展其他表。如果使用Access查询设计器来设置连接,它将正确添加括号,因为db引擎需要包含多个连接的任何查询。

答案 1 :(得分:1)

Access(不幸的是)不支持OUTER JOIN。它的作用是INNER,LEFT和RIGHT JOINS。

  • INNER JOIN - 仅提供两个表共有的信息。
  • RIGHT JOIN - 提供两个表共有的所有信息以及与JOIN语句右侧的表不匹配的信息。
  • LEFT JOIN - 提供两个表共有的所有信息以及与LEFT中的表格不匹配的信息到JOIN语句。
  • OUTER JOIN - 是RIGHT JOIN和LEFT JOIN的UNION。

正如预期的那样,您只需要执行两个在两个方向上执行JOIN的查询,然后使用UNION将它们结合起来。这是一个漫长的过程,但这是唯一的方法!

SELECT * FROM 
(SELECT table1.FieldName1, table2.FieldName2
FROM table1 RIGHT JOIN table2 ON table1.ID = table2.ID 
UNION
SELECT table1.FieldName1, table2.FieldName2
FROM table1 LEFT JOIN table2 ON table1.ID = table2.ID)