3

互いに関連する 2 つのテーブルがあります:QUOTERunQUOTERunResults. QUOTERun特定の見積もりに必要なすべてのアイテムが含まれています。 QUOTERunResultsすべてのベンダー応答のレコードが含まれています。これらの応答を分析し、最適なベンダーを選択し、呼び出されたフィールドPrefferedを true に設定するプログラムがあります。どのベンダーも機能しない場合があります。優先としてマークされてQUOTERunいる一致するレコードがないすべてのレコードのリストを作成する必要があります。QUOTERunResults

これが私がこれまでに持っているものです:

Set rs1 = CurrentDb.OpenRecordset("SELECT ReferenceNumber FROM [QUOTERun] WHERE RunID = " & TempRunID, dbOpenDynaset)
Set rs2 = CurrentDb.OpenRecordset("SELECT ReferenceNumber, Preffered FROM [QUOTERunResults] " & _
                                  "WHERE RunID = " & TempRunID & " AND Preffered = True", dbOpenDynaset)
If (rs2.RecordCount = 0) Then
   TempListNotComplete = "NONE OF THE VENDOR RESPONSES HAD ENOUGH STOCK. NO RECORDS HAVE BEEN MARKED AS PREFFERED."
ElseIf (rs1.RecordCount <> 0) Then
   rs1.MoveFirst
   Do While rs1.EOF <> True
      rs2.FindFirst "ReferenceNumber = " & rs1.Fields("[ReferenceNumber]").value
      If (rs2.Fields("[ReferenceNumber]").value <> rs1.Fields("[ReferenceNumber]").value) Then
         If (TempListNotComplete = "") Then 
            TempListNotComplete = rs1.Fields("[ReferenceNumber]").value 
     Else 
            TempListNotComplete = TempListNotComplete & ", " & rs1.Fields("[ReferenceNumber]").value
     End If
      End If
      rs1.MoveNext
   Loop
End If

上記を行うより効率的な方法はありますか?

4

1 に答える 1

3

クエリデザインウィンドウのSQLビューでクエリを作成できます。

SELECT a.ReferenceNumber 
FROM
    (SELECT ReferenceNumber 
     FROM [QUOTERun] 
     WHERE RunID = [Enter TempRunID]) a
LEFT JOIN 
    (SELECT ReferenceNumber, Preffered 
     FROM QUOTERunResults 
     WHERE RunID = [Enter TempRunID] AND Preffered = True) b
On a.ReferenceNumber=b.ReferenceNumber
WHERE b.ReferenceNumber Is Null

上記は、2番目の派生テーブルにない最初の派生テーブルのすべてのレコードを表示する必要があります。

于 2012-08-10T15:13:35.687 に答える