0

サーバーでは正常に機能するがAccessでは機能しないこのクエリSQLがあり、変換に問題があります。JETいくつかの機能が欠けているといつも聞いていTSQLますが、複雑な結合もその1つだと思います。

SELECT C.[Position], TT.[Description] as TrainingType, T.ProgramTitle, T.ProgramSubTitle, T.ProgramCode, ET.CompletedDate
from HR_Curriculum C
LEFT JOIN HR_Trainings T ON C.TrainingID = T.TrainingID
LEFT JOIN HR_TrainingTypes TT ON T.TrainingTypeID = TT.TrainingTypeID

LEFT JOIN HR_EmployeeTrainings ET ON C.TrainingID = ET.TrainingID
                                 AND (ET.AvantiRecID IS NULL OR ET.AvantiRecID = '637')
where ( c.[Position] = 'Customer Service Representative'
      OR C.[Position] = 'All Employees')
order by [Position], Description, ProgramTitle

WHERE句に余分な結合句を入れてみましたが、何らかの理由で適切なレコード数が得られません。

4

2 に答える 2

2

複数ある場合はJOINms-access次のように括弧で囲む必要があります。

SELECT C.[Position], TT.[Description] as TrainingType, T.ProgramTitle, T.ProgramSubTitle, T.ProgramCode, ET.CompletedDate
from (((HR_Curriculum C
LEFT JOIN HR_Trainings T ON C.TrainingID = T.TrainingID)
LEFT JOIN HR_TrainingTypes TT ON T.TrainingTypeID = TT.TrainingTypeID)

LEFT JOIN HR_EmployeeTrainings ET ON C.TrainingID = ET.TrainingID
                                 AND (ET.AvantiRecID IS NULL OR ET.AvantiRecID = '637'))
where ( c.[Position] = 'Customer Service Representative'
      OR C.[Position] = 'All Employees')
order by [Position], Description, ProgramTitle

または、Missing Operatorエラーが発生します

于 2012-10-15T18:12:08.157 に答える
1

テーブルエイリアスが「as」で無効になっていることを確認してください。Accessは[tablename][alias]を好みません。代わりに、[tablename]を[alias]として試してください。複雑な左結合が問題になることはないはずですが、結合エラーが返される場合は、Accessがエイリアスの削除を窒息させている可能性があります。また、ETテーブルの制限を調べて、それをより大きなクエリに結合してみます。左結合または右結合に関連するレコードに制限を設定しようとすると、Accessが結合後にセットを制限するため、正しいレコードが生成されないことがよくあります。

于 2012-10-15T18:09:14.440 に答える