如何解决使用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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。