我有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来解决这个问题?就像我说的那样,只要第三个表是空的,或者它们只在他们选择的第一个配置文件上工作,它就会很好用,除此之外它失败了。这有意义吗?
答案 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
这应该返回所有分配名称以及指定配置文件的任何分配。如果任何配置文件的分配已存在且当前配置文件未进行任何分配,则示例中的查询将不会显示记录。