何时打开和关闭MS Access SQL中的连接括号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了何时打开和关闭MS Access SQL中的连接括号相关的知识,希望对你有一定的参考价值。

我想知道何时在MS Access查询中表示联接时打开和关闭括号,因为我正在使用C ++ for MS Access查询开发查询构建器,以便我可以应用相同的代码来生成类似的查询。

SELECT 
    MasterTool.Name, Toolsets.SlaveToolID, Tools.MachineID  
FROM 
    Tools AS MasterTool
    LEFT JOIN 
    (
        Toolsets LEFT JOIN Tools ON Toolsets.SlaveToolID = Tools.ID
    )
    ON MasterTool.ID = Toolsets.MasterToolID

编辑:

@LeeMac根据您的解释,当我修改我之前提到的查询时

   SELECT Tools.Name, Toolsets.SlaveToolID, Tools.MachineID  FROM (Tools  
   LEFT JOIN  Toolsets ON Toolsets.SlaveToolID = Tools.ID )
   LEFT JOIN  Tools ON  Toolsets.MasterToolID = Tools.ID

我收到错误加入表达式不支持是否有任何简单的方法来编写上述查询。

答案

实质上,当MS Access查询引用两个以上的表时,一对表之间的每个连续连接都应嵌套在括号中。

例如,具有两个表的查询不需要括号:

enter image description here

select *
from a inner join b on a.id = b.id

添加第三个连接表需要围绕原始连接的括号,以便将其与其他连接区分开:

enter image description here

select *
from 
(
    a inner join b on a.id = b.id
) 
inner join c on a.id = c.id

然后,每次连续添加一个表都会导致现有连接嵌套在另一个括号中:

enter image description here

select *
from 
(
    (
        a inner join b on a.id = b.id
    ) 
    inner join c on a.id = c.id
)
inner join d on a.id = d.id

因此,一般来说:

select *
from 
(
    (
        (
            (
                table1 [inner/left/right] join table2 on [conditions]
            ) 
            [inner/left/right] join table3 on [conditions]
        )
        [inner/left/right] join table4 on [conditions]
    )
    ...
)
[inner/left/right] join tableN on [conditions]

有关LEFT/RIGHT加入的细微之处,因为嵌套的顺序必须保持连接的方向,例如:

enter image description here

select *
from 
(
    c left join b on c.id = b.id
) 
left join a on a.id = b.id

可以改为:

select *
from 
c left join
(
    b left join a on b.id = a.id
)
on c.id = b.id

以上是关于何时打开和关闭MS Access SQL中的连接括号的主要内容,如果未能解决你的问题,请参考以下文章

关闭使用附加查询打开的 MS Access laccdb 文件

从 MS SQL SERVER 和 MS ACCESS 调用存储过程的结果之间的差异

从 MS Access 中的 ODBC 连接中提取 UID

左连接 SQL 查询 - MS Access

ODBC 连接凭据如何存储在 MS Access 中? [关闭]

MS Access 2007 中的 SQL 内部连接