MS Access 2007中的SQL连接问题

MS Access 2007中的SQL连接问题,sql,ms-access,join,Sql,Ms Access,Join,这在MySQL测试环境中非常有效,但在我实际需要运行它的MS Access 2007中不起作用。我还有一些涉及使用JOIN的其他查询,它也给出了相同的错误:“FROM子句中的语法错误” 编辑: 实际上,这一个工作正常,并提供了所需的id号,但我想要输出的是借款人表中包含的名称。我认为不能混合使用隐式连接和显式连接。你应该试试这个 SELECT DISTINCT l.Bor_id FROM Loan AS l INNER JOIN Book_Copy AS bc ON l.Bc_id = bc.B

这在MySQL测试环境中非常有效,但在我实际需要运行它的MS Access 2007中不起作用。我还有一些涉及使用JOIN的其他查询,它也给出了相同的错误:“FROM子句中的语法错误”

编辑:


实际上,这一个工作正常,并提供了所需的id号,但我想要输出的是借款人表中包含的名称。

我认为不能混合使用隐式连接和显式连接。你应该试试这个

SELECT DISTINCT l.Bor_id
FROM Loan AS l
INNER JOIN Book_Copy AS bc
ON l.Bc_id = bc.Bc_id
GROUP BY l.Bor_id, bc.Bt_id
HAVING COUNT( bc.Bt_id ) > 1
AND COUNT( l.Bor_id ) > 1

我认为不能混合使用隐式连接和显式连接。你应该试试这个

SELECT DISTINCT l.Bor_id
FROM Loan AS l
INNER JOIN Book_Copy AS bc
ON l.Bc_id = bc.Bc_id
GROUP BY l.Bor_id, bc.Bt_id
HAVING COUNT( bc.Bt_id ) > 1
AND COUNT( l.Bor_id ) > 1

我没有使用Access 2007进行测试。然而,如果我单独尝试连接(不显式使用内部连接),Access 2003会抱怨“from子句中的语法错误”。似乎数据库引擎要求您将连接指定为右连接、左连接或内部连接;我找不到它能接受的任何其他变化


更新:我建议您使用Access“查询设计器”创建新查询。只需添加表并设置联接。(将GROUP BY和其他内容留待以后使用。)然后,您可以切换到SQL视图以查看使Access满意的联接语法类型

我没有使用Access 2007进行测试。然而,如果我单独尝试连接(不显式使用内部连接),Access 2003会抱怨“from子句中的语法错误”。似乎数据库引擎要求您将连接指定为右连接、左连接或内部连接;我找不到它能接受的任何其他变化

SELECT DISTINCT bw.Bor_name
FROM Borrower AS bw
join Loan AS l
on bw.Bor_id = l.Bor_id
JOIN Book_Copy AS bc
ON l.Bc_id = bc.Bc_id
GROUP BY l.Bor_id, bc.Bt_id
HAVING COUNT( bc.Bt_id ) > 1
AND COUNT( l.Bor_id ) > 1;
更新:我建议您使用Access“查询设计器”创建新查询。只需添加表并设置联接。(将GROUP BY和其他内容留待以后使用。)然后,您可以切换到SQL视图以查看使Access满意的联接语法类型

SELECT DISTINCT bw.Bor_name
FROM Borrower AS bw
join Loan AS l
on bw.Bor_id = l.Bor_id
JOIN Book_Copy AS bc
ON l.Bc_id = bc.Bc_id
GROUP BY l.Bor_id, bc.Bt_id
HAVING COUNT( bc.Bt_id ) > 1
AND COUNT( l.Bor_id ) > 1;
最终这一个成功了。再次感谢所有提供建议的人



最终这一个成功了。再次感谢所有提供建议的人

你真的在使用MySQL为MS Access做原型吗?只是好奇。这不是问题的根源(不带INNER/LEFT/RIGHT的连接是问题所在),但是为什么要显式地执行一个连接,即l=>bc,而隐式地执行一个连接,即bw=>l?两者都是内部联接,因此使用联接同时进行这两种操作应该会有任何问题。虽然Jet通常会以相同的方式优化等价的隐式连接和显式连接,但我希望这是一个显式连接——我从不使用隐式连接,除非有充分的理由这样做。@Larry:MySQL是我家里的测试环境。不幸的是,我现在没有Access 2007进行测试,我对实际帮助的回复将在周一之前发布。@David:非常感谢您的回复!我真的相信你有足够的能力,我非常感谢你的关心。是的,起初我尝试使用左/右连接,但它会给我相同的错误。当我能够再次在Access中测试时,我将更多地使用它。呃,谢谢?也就是说,为了确认我的能力?你真的在使用MySQL为MS Access制作原型吗?只是好奇。这不是问题的根源(不带INNER/LEFT/RIGHT的连接是问题所在),但是为什么要显式地执行一个连接,即l=>bc,而隐式地执行一个连接,即bw=>l?两者都是内部联接,因此使用联接同时进行这两种操作应该会有任何问题。虽然Jet通常会以相同的方式优化等价的隐式连接和显式连接,但我希望这是一个显式连接——我从不使用隐式连接,除非有充分的理由这样做。@Larry:MySQL是我家里的测试环境。不幸的是,我现在没有Access 2007进行测试,我对实际帮助的回复将在周一之前发布。@David:非常感谢您的回复!我真的相信你有足够的能力,我非常感谢你的关心。是的,起初我尝试使用左/右连接,但它会给我相同的错误。当我能够再次在Access中测试时,我将更多地使用它。呃,谢谢?也就是说,为了确认我的能力,您可以在Jet/ACE/Access SQL中混合使用隐式/显式连接。问题是缺少连接类型,INNER/LEFT/RIGHT。请确认一下,它在MySQL中工作得非常好。我将在Access中再次测试,并让您知道结果是什么。在Access中混合隐式连接和显式连接也不会有任何问题,只要使用正确的连接语法。不幸的是,上面建议的代码在MS Access中也不起作用。它仍然会给我同样恼人的错误。取消内/左/右键也没有帮助。您可以在Jet/ACE/Access SQL中混合使用隐式/显式连接。问题是缺少连接类型,INNER/LEFT/RIGHT。请确认一下,它在MySQL中工作得非常好。我将在Access中再次测试,并让您知道结果是什么。在Access中混合隐式连接和显式连接也不会有任何问题,只要使用正确的连接语法。不幸的是,上面建议的代码在MS Access中也不起作用。它仍然给我同样恼人的错误。取消内/左/右键也没有帮助。非常感谢这里的回复!是的,这是我到目前为止尝试过的,但没有成功。非常感谢这里的回复!是的,到目前为止我一直在尝试,但没有成功。