次の設計でMSAccessデータベースを使用する:
Tables
Equipment, Employees, CreditCard
Fields
Equipment: ID, PrimaryEmployee, SecondaryEmployee
Employees: ID, CreditCard
CreditCard: ID, Number, Pin
したがって、1つの機器に2人の異なる従業員を割り当てることができます。各従業員には、クレジットカードを割り当てることも、まったく割り当てないこともできます。
機器のIDに基づく:
- 機器にSecondaryEmployeeIDが設定されていて、対応する従業員にCreditCardが設定されている場合は、そのCreditCardの値を返します。
- それ以外の場合、機器にPrimaryEmployeeIDが設定されていて、対応する従業員にCreditCardが設定されている場合は、そのCreditCardの値を返します。
また、同じクエリでEmployeesテーブルから従業員の名前を取得する必要があるため、以前はLEFT JOINを使用していましたが、これは私の知る限りでは不可能であるように思われました。
編集済み
私の現在のクエリの試み:
SELECT
Equipment.ID,
Equipment.PrimaryEmployee,
Equipment.SecondaryEmployee,
Employees.CreditCard,
CreditCard.Pin
FROM
(Equipment
LEFT JOIN Employees ON Equipment.PrimaryEmployee = Employees.ID
)
LEFT JOIN CreditCard ON Employees.CreditCard = CreditCard.ID
WHERE (((Equipment.EquipmentType)=1))
読みやすさを改善し、問題のある領域を単純化するために、クエリからいくつかの無関係なフィールドを削除しました。
これは現在、次のような結果を生成しています。
ID PrimaryEmployee SecondaryEmployee CreditCard Pin
--------------------------------------------------------------------
1 John Doe Jack Smith 1234567890 1234
2 Bubba Smith Ryan Howard 2345678901 2345
問題は、PrimaryEmployeeでのみ一致することです。最初にSecondaryEmployeeを確認する必要があります。一致またはクレジットカードが設定されていない場合は、PrimaryEmployeeで一致します。どちらも一致しない場合は、Nullまたは「-」を返します。
それでも追加情報が必要な場合はお知らせください。