2016-06-01 7 views
2

これは説明するのが少し難しいので、私にこのことを言わせてください。私は3つのテーブルを持っています。MS Accessで結合結果がnullの場合でもクエリ結果を返すにはどうすればよいですか?

ID P_FID A_FID PRIORITY 
======================== 
1 1  2  1 
2 1  1  2 
:第三の両方のFIDのが含まれており、そのようにそれらに優先順位を付けることができます私の

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

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

秒が割り当てが含まれています。下記のように

一つは、プロファイルが含まれています

私の問題は、連続したフォームを介して3番目のテーブルにデータを入力しているため、エンドユーザーが優先度を入力する能力。基本的には、ユーザーが適切なプロファイルを選択できるようにするコンボボックスがあります。 3番目のテーブルにエントリがない場合、優先順位を入力できるようにすべての割り当てが表示されます。そのテーブルにすでにレコードがある場合、それらの値を取得して優先順位を更新する必要があります。

次のクエリは、3番目のテーブルが空である限り有効です。ユーザーが優先度を入力して別のプロファイルに切り替えると、選択したプロファイルでない限りレコードは返されません。

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に戻す必要がありますか?私が言ったように、それは3番目のテーブルが空であるか、彼らが選択した最初のプロファイルでのみ動作し、失敗した場合にのみ機能します。これは理にかなっていますか?サブクエリにそれを回す

答えて

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

関連する問題