0

使用具有以下设计的 MS Access 数据库:

Tables
Equipment, Employees, CreditCard

Fields
Equipment: ID, PrimaryEmployee, SecondaryEmployee
Employees: ID, CreditCard
CreditCard: ID, Number, Pin

因此,一件设备可以有两个不同的员工分配给它。每个员工可以有一张信用卡分配给他们,或者根本没有。

基于一台设备的ID:

  • 如果该设备设置了 SecondaryEmployeeID,并且相应的 Employee 设置了 CreditCard,则返回该 CreditCard 的值。
  • 否则,如果该设备设置了 PrimaryEmployeeID,并且相应的 Employee 设置了 CreditCard,则返回该 CreditCard 的值。

我还必须在同一个查询中从员工表中提取员工的姓名,因此,我之前使用的是 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 或 '-'。

让我知道是否仍需要其他信息。

4

2 回答 2

1

在不破坏 SQL 的情况下,最简单的方法是创建第二个查询,该查询使用第一个查询的结果,并拉入第一个结果所在的 Employee 列IS NULL.

一旦你得到了你的两个查询,你就可以编写第三个查询,将两个查询的结果连接到一个输出中。

于 2012-04-17T19:52:21.663 回答
0
LEFT JOIN Employees ON ISNULL(Equipment.SecondaryEmployee, Equipment.PrimaryEmployee) = Employees.ID

这应该有效,但请检查性能。左连接将为没有任何员工的人提取空值。

于 2012-04-17T19:55:48.713 回答