MS Access Inner Join 3 个具有相同 field_name 的表

Posted

技术标签:

【中文标题】MS Access Inner Join 3 个具有相同 field_name 的表【英文标题】:MS Access Inner Join On 3 Tables with the same field_name 【发布时间】:2014-06-10 01:53:09 【问题描述】:

我正在做课堂作业,但我已经筋疲力尽了。基本上,我需要编写一个使用INNER JOIN 的查询来组合4 个表中的所有数据,同时避免标题列具有相同的名称(即Table1.Master_NumberTable2.Master_Number)。文字说明如下:

步骤 1: 创建 Lecture 5 数据库的所有表中所有列的视图(如果列在表中重复,则仅列出一次)。将此查询保存为 Lecture_5_View 并使用此查询来构建以下 3 个查询。在“FROM”子句中,您必须在此查询中使用“INNER JOIN”。请记住 ACCESS 不支持“CREATE VIEW”命令,因此您必须创建一个选择查询。 `

这是数据库的屏幕截图,显示了所有标题和列标题。

根据this 等其他帖子,我认为这会很简单。到目前为止我有这个,但它不想运行

(即查询表达式'Table1.Master_Number = Table2.Master_Number INNER JOIN Table4 ON Table1.Master_Number = Table4.Master_Number中的语法错误(缺少运算符))

SELECT * 
FROM Table1
INNER JOIN Table2 ON Table1.Master_Number = Table2.Master_Number
INNER JOIN Table4 ON Table1.Master_Number = Table4.Master_Number

到目前为止我哪里出错了,我该如何完成这个查询?

非常感谢, 乔什

【问题讨论】:

尝试运行时遇到什么错误? does not want to run. 是什么意思?它会给你一个错误吗? 永远不要再使用 select *。非常糟糕的做法,特别是如果您有连接。另外,如果您想传递不重复列的说明,则需要列出列。 【参考方案1】:

使用 Access 时,您需要在进行多个连接时使用括号:

SELECT  * 
FROM    (Table1 
        INNER JOIN Table2 
            ON Table1.Master_Number = Table2.Master_Number)
        INNER JOIN Table4 
            ON Table1.Master_Number = Table4.Master_Number;

这本质上是拆分您的查询,因此每个部分最多有一个连接,即您的第一个查询是:

SELECT  *
FROM    Table1
        INNER JOIN Table2
            ON Table1.Master_Number = Table2.Master_Number;

那么你有:

SELECT  *
FROM    YourFirstQuery
        INNER JOIN Table4 
            ON Table1.Master_Number = Table4.Master_Number;

这与子查询略有不同,因为您仍然可以引用 Table1 和 Table2 中的所有字段。


编辑

为避免重复列,您需要明确列出所需的列 (although you should be doing this anyway):

SELECT  Table1.Master_Number,
        Table1.Asset_Tag,
        Table1.Serial_Number,
        Table2.Last_Name,
        Table2.First_Name,
        Table4.Office_Number,
        Table4.Location,
        Table4.Department
FROM    (Table1 
        INNER JOIN Table2 
            ON Table1.Master_Number = Table2.Master_Number)
        INNER JOIN Table4 
            ON Table1.Master_Number = Table4.Master_Number;

【讨论】:

这行得通,但它给了我Table1.Master_NumberTable2.Master_NumberTable4.Master_Number。我认为它应该只是一个名为 Master_Number 的列。 我认为我必须明确列出它们,但我并不完全确定。感谢您的澄清。最后,对于Table1.Asset_TagTable3.Asset_Tag,我需要另一个INNER JOIN,对吗? 是的,您只需要在连接周围添加另一组括号。【参考方案2】:

试试这个:

  SELECT * FROM ((Table1
  INNER JOIN Table2 
  ON Table1.Master_Number = Table2.Master_Number)
  INNER JOIN Table4 
  ON Table1.Master_Number = Table4.Master_Number)

【讨论】:

以上是关于MS Access Inner Join 3 个具有相同 field_name 的表的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 多 (INNER, LEFT & RIGHT) JOIN 查询

MS Access 的 INNER JOIN 问题

如何使用多个 INNER JOIN 加快查询速度

多个 INNER JOIN SQL ACCESS

在 SQL ACCESS 中使用 LEFT 或 INNER JOIN 和 WHERE 的问题

join on 与inner join 有啥不同呢 ?