繁体   English   中英

MS Access 2007中的SQL JOIN问题

[英]SQL JOIN problem in MS Access 2007

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

这在MySQL测试环境中可以完美运行,但在我实际需要运行它的MS Access 2007中则无法使用。 我还有其他一些涉及使用JOIN的查询,它也为他们提供了相同的错误:“ FROM子句中的语法错误”。

编辑:

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

实际上,这可以正常工作并提供所需的ID号,但我要输出的是Borrower表中包含的名称。

我没有使用Access 2007进行测试。但是,如果我尝试单独使用JOIN(未明确使用INNER JOIN),则Access 2003会抱怨“ from子句中的语法错误”。 似乎数据库引擎要求您将JOIN指定为RIGHT JOIN,LEFT JOIN或INNER JOIN; 我找不到它将接受的任何其他变体。

更新:我建议您使用Access的查询设计器创建一个新查询。 只需添加表并设置联接。 (将GROUP BY和其他所有内容留待以后使用。)然后,您可以切换到SQL View,以查看使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;
SELECT DISTINCT bw.Bor_name
FROM Borrower AS bw, Loan AS l
JOIN Book_Copy AS bc
ON (l.Bc_id = bc.Bc_id)
WHERE bw.Bor_id = l.Bor_id
GROUP BY bw.Bor_name, bc.Bt_id
HAVING COUNT( bc.Bt_id ) > 1
AND COUNT( l.Bor_id ) > 1;

最终,这个工作完成了。 再次感谢所有提供建议的人!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM