即使在 MS Access 中连接结果为空,我如何 return 查询结果?

How do I return query results even if the join result is null in MS Access?

我有 3 个 table。

一个包含如下所述的配置文件:

ID  NM
==============
1   Profile A
2   Profile B

第二个包含作业:

ID  NM
==============
1   Assignment A
2   Assignment B

我的第三个包含两者的 FID,并允许您像这样确定它们的优先级:

ID  P_FID  A_FID  PRIORITY
========================
1   1       2      1
2   1       1      2

我的问题是通过连续表单填充第三个 table,以便最终用户能够输入优先级。基本上,有一个组合框可以让用户 select 选择适当的配置文件。如果第三个 table 中没有条目,它应该会显示所有分配,以便您输入优先级。如果该 table 中已经有记录,它应该检索这些值,以便您可以更新优先级。

只要第三个 table 为空,以下查询就可以很好地工作。一旦用户输入优先级并尝试切换到不同的个人资料,它不会 return 任何记录,除非它是 selected 个人资料。

SELECT tblProfileForAssignments.PROFILE_FID,
       tblAssignments.NM,
       tblProfileForAssignments.PRIORITY
FROM tblAssignments
LEFT JOIN tblProfileForAssignments ON tblAssignments.ID = tblProfileForAssignments.ASSGNMNT_FID
WHERE (tblProfileForAssignments.PROFILE_FID = Forms!frmProfileAssignments!cmboProfile)
  OR (tblProfileForAssignments.PROFILE_FID IS NULL);

这是否可以在使用联合的单个查询中完成,我想,还是我应该回到 VBA 来解决这个问题?就像我说的那样,只要第三个 table 为空,或者他们只在他们 select 的第一个配置文件上工作,它就很好用,除此之外它就失败了。这有意义吗?

将其转换为子查询可能会满足您的需求:

SELECT PRIORITIES.PROFILE_FID, tblAssignments.NM,
 PRIORITIES.PRIORITY
FROM tblAssignments LEFT JOIN 
(SELECT ASSGNMNT_FID, PROFILE_FID, PRIORITY
 FROM tblProfileForAssignments 
 WHERE PROFILE_FID = [Forms]![frmProfileAssignments]![cmboProfile]) PRIORITIES
ON tblAssignments.ID = PRIORITIES.ASSGNMNT_FID 

这应该 return 所有分配名称以及指定配置文件的任何分配。如果存在任何配置文件的分配并且当前配置文件没有进行分配,则示例中的查询将不会显示记录。