使用具有以下设计的MS Access数据库:
Tables
Equipment, Employees, CreditCard
Fields
Equipment: ID, PrimaryEmployee, SecondaryEmployee
Employees: ID, CreditCard
CreditCard: ID, Number, Pin
因此,一件设备可以分配两名不同的员工。每个员工都可以分配一个CreditCard,或者根本不分配。
根据设备的ID:
我还必须在同一个查询中从Employees表中提取员工的姓名,因此,之前我使用的是LEFT JOIN,这似乎使我无法按照我的知识这样做。
EDITED
我当前的查询尝试:
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或' - '。
如果仍需要其他信息,请与我们联系。
答案 0 :(得分:1)
在不破坏SQL的情况下,最简单的方法是创建第二个查询,使用第一个查询的结果,然后在第一个结果IS NULL.
一旦你得到了两个查询,那么你只需要编写第三个查询,将两个查询的结果连接到一个输出中。
答案 1 :(得分:0)
LEFT JOIN Employees ON ISNULL(Equipment.SecondaryEmployee, Equipment.PrimaryEmployee) = Employees.ID
这应该有效,但检查性能。左连接将为没有雇员的人提取空值。