即使在 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 所有分配名称以及指定配置文件的任何分配。如果存在任何配置文件的分配并且当前配置文件没有进行分配,则示例中的查询将不会显示记录。
我有 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 所有分配名称以及指定配置文件的任何分配。如果存在任何配置文件的分配并且当前配置文件没有进行分配,则示例中的查询将不会显示记录。