2010-10-22 125 views
0
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號,但我想輸出是包含在借款人的表名。

+0

你真的使用MySQL爲MS Access的原型嗎?只是好奇。 – 2010-10-22 14:58:44

+0

這不是問題的根源(沒有INNER/LEFT/RIGHT的JOIN是問題),但是爲什麼你明確地做了一個連接,l => bc,還有一個隱式地bw => l?兩者都是INNER JOIN,因此在JOIN中應該有任何問題。雖然Jet通常優化相同的隱式和顯式JOIN,但我希望這是一個明確的JOIN--除非有充分的理由這麼做,否則我絕不使用隱式JOIN。 – 2010-10-23 01:05:09

+0

@Larry:MySQL是我在家裏的測試環境。不幸的是,我現在沒有使用Access 2007進行測試,並且我對實際幫助的迴應將在週一之前發佈。 – User3419 2010-10-23 17:33:47

回答

0
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; 

最終這個人做了這項工作。再次感謝所有提供建議的人!

0

我認爲你不能混合隱式和顯式連接。你應該有這個

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; 
+0

您可以在Jet/ACE/Access SQL中混合使用隱式/顯式JOIN。問題在於缺少JOIN類型,INNER/LEFT/RIGHT。 – 2010-10-23 01:05:57

+0

只是爲了確認 - 它在MySQL中完美運行。我會在Access中再次測試,並讓你知道結果是什麼。 – User3419 2010-10-23 17:41:09

+0

只要使用正確的JOIN語法,在Access中不應該有任何混合隱式和顯式JOIN的問題。 – 2010-10-24 02:35:39

4

嘗試我沒有Access 2007中考然而進入2003抱怨「FROM子句語法錯誤」如果我嘗試單獨加入(但並未明確使用INNER JOIN)。似乎數據庫引擎要求您將JOIN指定爲RIGHT JOIN,LEFT JOIN或INNER JOIN;我找不到任何其他可以接受的變化。

更新:我會建議你用Access的查詢設計器創建一個新的查詢。只需添加表格並設置連接即可。 (留下GROUP BY和其他所有內容以供後續使用。)然後,您可以切換到SQL View以查看使Access更加快樂的連接語法的類型。

+0

非常感謝這裏的回覆!是的,這就是我迄今爲止所嘗試的,但沒有成功。 – User3419 2010-10-23 17:36:19