Access-SQL:与多个表的内部联接

Posted

技术标签:

【中文标题】Access-SQL:与多个表的内部联接【英文标题】:Access-SQL: Inner Join with multiple tables 【发布时间】:2013-10-22 10:49:49 【问题描述】:

我在一个数据库中有多个表:

tblOjt

ID    studentid    courseid    companyid    addresseeid    dateadded    datestarted    dateended    ojthours

1         3            1           1             1         9/25/2013                                  500 

tblStudent

ID    lastname    firstname    middlename    course    gender    renderedhours    dateadded    archive

3     Dela Cruz      Juan        Santos       BSIT      Male          500

tblCourse

ID    coursealias    coursename                                            hours
1         BSIT      Bachelor of Science in Information Technology          500

tblCompany

ID    companyname

1      MyCompany

tblAddressee

ID    addresseename

1     John dela Cruz

我需要有一个 SQL 语句,我可以在其中获取这些值:

tableOjt.id  tableOJT.surname,firstname, and middlename  course  companyname  addresseename dateadded datestarted dateended ojthours

我将如何使用这些连接方法在 SQL 中获取此代码...我在 VB6 ADODC 中编写它,这与标准 SQL 中的语法是否相同?谢谢

【问题讨论】:

【参考方案1】:

如果您正在编写针对 Access 数据库后端的查询,则需要使用以下连接语法:

select
  t1.c1
, t2.c2
, t3.c3
, t4.c4
from ((t1
inner join t2 on t1.something = t2.something)
inner join t3 on t2.something = t3.something)
inner join t4 on t3.something = t4.something

这里的表名和列名并不重要,但括号的位置很重要。基本上,您需要在 from 子句之后有 n - 2 个左括号,在每个新的 join 子句开始之前有一个右括号,第一个除外,其中 n em> 是连接在一起的表的数量。

原因是 Access 的连接语法一次只支持连接两个表,因此如果需要连接两个以上的表,则需要将多余的表括在括号中。

【讨论】:

嗨,我试过你的方法:SELECT tblOjt.id, tblStudent.firstname, tblStudent.middlename, tblStudent.lastname, tblStudent.course, tblCompany.companyname, tbAddressee.addressee, tblOjt.dateadded, tblOjt。 datestarted, tblOjt.dateended, tblOjt.ojthours FROM ((tblOjt INNER JOIN tblStudent ON tblOjt.studentid = tblStudent.id) INNER JOIN tblCompany ON tblOjt.companyid = tblCompany.id) INNER JOIN tblAddressee ON tblOjt.addresseeid = tblAddressee.;但是,如果我在 SQL 中运行它,msAccess 会要求我将参数值输入到 tblAddressee.addressee .. 我不能完美地解决它.. /tblAddressee.addresseename .msAccess 要求我输入参数值 想通了,我没有 tblAddressee.addresseename ,我有 tblAddressee.addressee 谢谢你的信息:) 很高兴知道像我这样的 DBase III x mysql 负责人。 :) 我不明白为什么 SQL Server 工程师对此一言不发。对于属于同一软件专有的两个应用程序有两种不同的语法是有点荒谬的。尽管如此,它对我有用。谢谢!【参考方案2】:
SELECT tblOjt.id, tblStudent.firstname, tblStudent.middlename, 
       tblStudent.lastname, tblStudent.course, tblCompany.companyname, 
       tblAddressee.addressee 
FROM (((tblOjt 
     INNER JOIN tblStudent ON tblOjt.studentid = tblStudent.id) 
     INNER JOIN tblCourse ON tblOjt.courseid = tblCourse.id) 
     INNER JOIN tblCompany ON tblOjt.companyid = tblCompany.id) 
     INNER JOIN tblAddressee ON tblOjt.addresseeid = tbladdressee.id

找到了!感谢 Yawar 的方法...

【讨论】:

【参考方案3】:

一直在尝试使用 VBA 运行此 SQL,但不会使用 DoCmd.RunQuery 运行。我已经尝试过 SQL 并且它正在工作。

str = "SELECT tbl_company.[Company], tbl_company.[Commodity], tbl_company.[Segment], tbl_company.[MainProduct]," & _
      " tbl_financials.[DataYear]," & _
      " mstr_financial.[FinancialData]," & _
      " tbl_financials.[Amount]," & _
      " tbl_financials.[Unit]," & _
      " tbl_company.[CompanyID]" & _
      " FROM (tbl_company" & _
      " INNER JOIN tbl_financials ON tbl_company.[CompanyID] = tbl_financials.[CompanyID])" & _
      " INNER JOIN mstr_financial ON tbl_financials.[FinID] = mstr_financial.[FinID] " & _
      " ORDER BY tbl_company.[Company], tbl_financials.[DataYear] DESC"

【讨论】:

以上是关于Access-SQL:与多个表的内部联接的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server-交叉联接内部联接基础回顾

与大表的内部联接减慢查询

MYSQL:三个表的内部联接

使用具有多个条件的内部联接

与列数少于原始表的临时表的联接是不是比与原始表的联接更快?

如何使用 Spark sql 在 Databricks 中使用内部联接更新 Databricks Delta 表