即使MS Access中的连接结果为null,如何返回查询结果?

时间:2016-06-01 02:16:56

标签: sql ms-access access-vba union

我有3张桌子。

一个包含如下所述的个人资料:

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

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

只要第三个表为空,以下查询就可以正常工作。一旦用户输入优先级并尝试切换到不同的配置文件,它就不会返回任何记录,除非它是所选的配置文件。

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来解决这个问题?就像我说的那样,只要第三个表是空的,或者它们只在他们选择的第一个配置文件上工作,它就会很好用,除此之外它失败了。这有意义吗?

1 个答案:

答案 0 :(得分:1)

将其转换为子查询可能会为您提供所需内容:

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 

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