多个 INNER JOIN SQL ACCESS

Posted

技术标签:

【中文标题】多个 INNER JOIN SQL ACCESS【英文标题】:Multiple INNER JOIN SQL ACCESS 【发布时间】:2014-01-05 02:31:47 【问题描述】:

查询表达式“tbl_employee.emp_id = tbl_netpay.emp_id INNER JOIN tbl_gross ON tbl_employee.emp_id = tbl_gross.emp_ID INNER JOIN tbl_tax ON tbl_employee.emp_id - tbl_tax.emp_ID”中存在语法错误(缺少运算符)。

SELECT tbl_employee.emp_ID,
tbl_employee.emp_name,
tbl_gross.BasicSalary,
tbl_gross.totalOT,
tbl_netpay.totalGross,
tbl_tax.totalLate,
tbl_tax.allowance,
tbl_tax.SSS,
tbl_tax.PhilHealth,
tbl_tax.GSIS,
tbl_tax.HDMF,
tbl_netpay.totalDeduc,
tbl_netpay.emp_ti,
tbl_netpay.emp_wt,
tbl_netpay.emp_np
FROM  tbl_employee
INNER JOIN tbl_netpay ON tbl_employee.emp_id = tbl_netpay.emp_id
INNER JOIN tbl_gross ON tbl_employee.emp_id = tbl_gross.emp_ID
INNER JOIN tbl_tax ON tbl_employee.emp_id = tbl_tax.emp_ID;

我总是收到上面的错误。

【问题讨论】:

【参考方案1】:

对于包含多个连接的查询,Access 需要在 FROM 子句中使用括号。试试这个方法...

FROM
    ((tbl_employee
    INNER JOIN tbl_netpay
    ON tbl_employee.emp_id = tbl_netpay.emp_id)
    INNER JOIN tbl_gross
    ON tbl_employee.emp_id = tbl_gross.emp_ID)
    INNER JOIN tbl_tax
    ON tbl_employee.emp_id = tbl_tax.emp_ID;

如果可能,请使用 Access 查询设计器来设置您的联接。设计者将根据需要添加括号以保持数据库引擎的运行。

【讨论】:

【参考方案2】:

感谢 HansUp 的回答,它非常有帮助并且有效!

我发现三种在 Access 中工作的模式,你的是最好的,因为它适用于所有情况。

INNER JOIN,您的变体。我将其称为“闭集模式”。 只有使用这种模式,才能将两个以上的表连接到同一个表中并获得良好的性能。

SELECT C_Name, cr.P_FirstName+" "+cr.P_SurName AS ClassRepresentativ, cr2.P_FirstName+" "+cr2.P_SurName AS ClassRepresentativ2nd
FROM
     ((class
       INNER JOIN person AS cr 
       ON class.C_P_ClassRep=cr.P_Nr
     )
     INNER JOIN person AS cr2
     ON class.C_P_ClassRep2nd=cr2.P_Nr
  )

;

INNER JOIN "链式集合模式"

SELECT C_Name, cr.P_FirstName+" "+cr.P_SurName AS ClassRepresentativ, cr2.P_FirstName+" "+cr2.P_SurName AS ClassRepresentativ2nd
FROM person AS cr
INNER JOIN ( class 
   INNER JOIN ( person AS cr2
   ) ON class.C_P_ClassRep2nd=cr2.P_Nr
) ON class.C_P_ClassRep=cr.P_Nr
;

与 WHERE 交叉连接

SELECT C_Name, cr.P_FirstName+" "+cr.P_SurName AS ClassRepresentativ, cr2.P_FirstName+" "+cr2.P_SurName AS ClassRepresentativ2nd
FROM class, person AS cr, person AS cr2
WHERE class.C_P_ClassRep=cr.P_Nr AND class.C_P_ClassRep2nd=cr2.P_Nr
;

【讨论】:

以上是关于多个 INNER JOIN SQL ACCESS的主要内容,如果未能解决你的问题,请参考以下文章

多个 INNER JOIN SQL ACCESS

如何在sql中创建INNER JOIN多个表

sql用inner join内关联查询有多条记录一样只取一条?

使用 INNER JOIN 更新 SQL Server 中的多个表 [重复]

如何在 SQL Server 中使用 INNER JOIN 从多个表中删除

带有 INNER JOIN 和 WHERE 的 SQL 查询