【问题标题】:Access: Inner join query not producing results访问:内部连接查询不产生结果
【发布时间】:2014-12-18 02:49:01
【问题描述】:

我正在尝试对以下表格执行查询(使用 Access 2010):

Contact   |   Facility_Contact   |   Facility   |   Bank
          |                      |              |     
ID        |   (fk) Contact_ID    |      ID      |   ID
CName     |   (fk) Facility_ID   |    FName     |   BName
          |                      |    BNumber   |   BNumber

我希望显示最终结果:

CName | FName | BName

这是查询:

SELECT 
  HUD.[HOLDER NAME], Facility.PROVNAME, Contact.LAST_NAME

FROM 
  Facility INNER JOIN Bank ON Facility.[BNumber] = Bank.[BNumber]) INNER JOIN
  (Contact INNER JOIN Facility_Contact ON Contact.[ID] = Facility_Contact.[Contact_ID]) ON Facility.[ID] = Facility_Contact.[Facility_ID];

这不会产生任何结果。

当我添加“银行”表时问题出现了。从联系人到设施的查询有效,从设施到银行的查询也是如此。但是,当我尝试从联系人链接到银行时,我很难产生结果。

也许某处的 Where-like 子句?但现在我说的是我不太熟悉的东西;)

谢谢大家!

【问题讨论】:

  • 您在银行的加入标准中的HUD是什么?它似乎被无处引用
  • 好渔获,应该换成银行。但这只是写入SO。将编辑

标签: sql ms-access ms-access-2010 inner-join


【解决方案1】:

FROM Facility INNER JOIN Bank ON Facility.[BNumber] = HUD.[BNumber])

你关闭了一个paranthetical,但从不打开它。虽然这会导致错误,但我认为这是一个错字。


Facility INNER JOIN Bank ON Facility.[BNumber] = HUD.[BNumber]

您将加入FacilityBank,但是在您的ON 子句中您声明Facility.[BNumber] = HUD.[BNumber] HUD 是从哪里来的?这不好。


Facility INNER JOIN Bank ON Facility.[BNumber] = HUD.[BNumber]) INNER JOIN (Contact INNER JOIN Facility_Contact ON Contact.[ID] = Facility_Contact.[Contact_ID]) ON Facility.[ID] = Facility_Contact.[Facility_ID];

您的架构似乎是 Facility->Bank;设施->设施_联系->联系。考虑重写以反映这一点(这只是为了便于阅读):

FROM 
    Facility 
    INNER JOIN Bank ON Facility.[BNumber] = Bank.[BNumber]
    INNER JOIN Facility_Contact ON Facility.[ID] = Facility_Contact.[Facility_ID]
    INNER JOIN Contact ON Facility_Contact.[Contact_ID] = Contact.[ID] 

现在要获取返回的记录,所有这些连接都需要包含数据。对于Facility 表中的每个BNumber,您的Bank 表中需要有一个匹配的BNUMBERFacility 中的每个 IDFacility_Contact 表中都需要有一个匹配的 facility_idFacility_Contact 表中的每个 Contact_ID 都需要在 Contact 表中有一个匹配的 ID。如果缺少这些链接中的任何一个,您将获得 0 条记录。如果您想显示设施和银行名称,无论他们是否有设施联系人,请考虑使用 LEFT JOIN:

FROM 
    Facility 
    INNER JOIN Bank ON Facility.[BNumber] = Bank.[BNumber]
    LEFT JOIN Facility_Contact ON Facility.[ID] = Facility_Contact.[Facility_ID]
    LEFT JOIN Contact ON Contact.[ID] = Facility_Contact.[Contact_ID]

这不会因为您在设施中还没有联系人而放弃结果。或者该联系人尚未在联系人表中设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-12
    • 2016-07-02
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2015-03-10
    • 2012-05-28
    相关资源
    最近更新 更多