2016-06-01 58 views
2

這有點難以描述,所以對我這麼裸露。我有3張桌子。即使連接結果在MS Access中爲空,我如何返回查詢結果?

一個包含了配置文件,如下所述:

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

把它變成一個子查詢可能給你你需要的東西:

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 

這應該與指定配置文件的任何任務一起返回所有任務的名稱。如果存在任何配置文件的分配並且當前配置文件沒有分配,則示例中的查詢將不顯示記錄。

+0

太棒了!這就像一個冠軍。 – Munsterlander