使用MS Access 2003通过ODBC进行嵌套的内部联接

| 如果可行:
SELECT COUNT(t1.ID) AS count FROM Project t1
INNER JOIN (SELECT DISTINCT t.Site,t.id FROM _Equipment_id t WHERE t.OEM LIKE \'%ABC%\') t2 ON t1.Site=t2.Site AND t1.id=t2.id
这有效:
SELECT COUNT(t3.ID) AS count FROM Wall t3
INNER JOIN Project t1 ON t3.Project_number=t1.Project_number
为什么这样不起作用:
SELECT COUNT(t3.ID) AS count FROM Wall t3
INNER JOIN Project t1 ON t3.Project_number=t1.Project_number
INNER JOIN (SELECT DISTINCT t.Site,t.id FROM _Equipment_id t WHERE t.OEM LIKE \'%ABC%\') t2 ON t1.Site=t2.Site AND t1.id=t2.id
最终,我有10个表(例如Wall表),我正尝试从第一个SELECT中获取总数。     
已邀请:
SELECT COUNT(t3.ID) AS count FROM Wall t3
INNER JOIN (Project t1 
INNER JOIN (SELECT DISTINCT t.Site,t.id FROM _Equipment_id t WHERE t.OEM LIKE \'%ABC%\') t2 
ON t1.Site=t2.Site AND t1.id=t2.id)
ON t3.Project_number=t1.Project_number
也许只是语法错误?他们在底部提到嵌套的Office帮助。另一种可能性是,别名在某种程度上受到限制,因此它们对联接不可用,但是我不是MS Access方面的专家。也许您应该尝试完全删除别名。     
您的代码有几个小问题:以下划线字符(
_Equipment_id
)开头的表名和作为SQL关键字(
AS count
)的
AS
子句(\“ alias \”)。更正这些错误后,您的SQL即为有效的SQL-92语法。 可悲的是,问题在于Access(ACE,Jet等)不支持SQL-92标准。 Access坚持将每个嵌套的
JOIN
子句放在括号中。 [此外:在标准SQL中允许在括号中加上7,因为它可能会更改查询结果。但是,Access不遵循编码器指定的顺序,而是允许自己评估fir7ѭ的顺序。因此,不仅Access的语法不符合该标准,而且还会失去功能!但是,Access的此进一步问题不会对该特定查询产生不良影响。] 您在同一范围内有两个
JOIN
...
INNER JOIN Project t1 ON t3.Project_number=t1.Project_number
INNER JOIN
...
您的代码需要通过在括号中加上ѭ7来解决Access的问题。因为您所有的ѭ7are都是
INNER
,所以去哪里可能都没关系。 另外,关于更正
AS
子句,Access再次不支持Standard SQL的带引号的标识符(
...AS \"count\"...
),并坚持使用专有的方括号语法(
...AS [count]...
)-当然,您可以选择其他名称,但是可能存在依赖它的应用程序代码。 解决两个访问问题的代码:
SELECT COUNT(t3.ID) AS [count] 
  FROM (Wall t3
       INNER JOIN Project AS t1 
          ON t3.Project_number = t1.Project_number)
       INNER JOIN (
                   SELECT DISTINCT t.Site,t.id 
                     FROM _Equipment_id AS t 
                    WHERE t.OEM LIKE \'%ABC%\'
                  ) AS t2 
          ON t1.Site = t2.Site 
             AND t1.id = t2.id;
    

要回复问题请先登录注册