MS Access 2007中的SQL JOIN问题
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子句中的语法错误”。MS Access 2007中的SQL JOIN问题
编辑:
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号,但我想输出是包含在借款人的表名。
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;
最终这个人做了这项工作。再次感谢所有提供建议的人!
我认为你不能混合隐式和显式连接。你应该有这个
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;
您可以在Jet/ACE/Access SQL中混合使用隐式/显式JOIN。问题在于缺少JOIN类型,INNER/LEFT/RIGHT。 – 2010-10-23 01:05:57
只是为了确认 - 它在MySQL中完美运行。我会在Access中再次测试,并让你知道结果是什么。 – User3419 2010-10-23 17:41:09
只要使用正确的JOIN语法,在Access中不应该有任何混合隐式和显式JOIN的问题。 – 2010-10-24 02:35:39
尝试我没有Access 2007中考然而进入2003抱怨“FROM子句语法错误”如果我尝试单独加入(但并未明确使用INNER JOIN)。似乎数据库引擎要求您将JOIN指定为RIGHT JOIN,LEFT JOIN或INNER JOIN;我找不到任何其他可以接受的变化。
更新:我会建议你用Access的查询设计器创建一个新的查询。只需添加表格并设置连接即可。 (留下GROUP BY和其他所有内容以供后续使用。)然后,您可以切换到SQL View以查看使Access更加快乐的连接语法的类型。
非常感谢这里的回复!是的,这就是我迄今为止所尝试的,但没有成功。 – User3419 2010-10-23 17:36:19
你真的使用MySQL为MS Access的原型吗?只是好奇。 – 2010-10-22 14:58:44
这不是问题的根源(没有INNER/LEFT/RIGHT的JOIN是问题),但是为什么你明确地做了一个连接,l => bc,还有一个隐式地bw => l?两者都是INNER JOIN,因此在JOIN中应该有任何问题。虽然Jet通常优化相同的隐式和显式JOIN,但我希望这是一个明确的JOIN--除非有充分的理由这么做,否则我绝不使用隐式JOIN。 – 2010-10-23 01:05:09
@Larry:MySQL是我在家里的测试环境。不幸的是,我现在没有使用Access 2007进行测试,并且我对实际帮助的回应将在周一之前发布。 – User3419 2010-10-23 17:33:47