2009-11-06 45 views
0

以下SQL將返回每BT.Bt_Name其中L.date_back爲空。我只希望選擇BT.Bt_Name S其中L.Bc_id被複制重複加入

SELECT BT.Bt_Name 
FROM Book_Title BT INNER JOIN (
    Book_Copy BC INNER JOIN Loan L ON BC.Bc_id = L.Bc_id 
) ON BT.Bt_id = BC.Bt_id 
WHERE L.Date_back Is NULL 
GROUP BY BT.Bt_name 
HAVING COUNT(L.Bc_id) >1; 

是它加入其造成COUNT(L.Bc_id)爲> 1,其中L.Date_back是空的所有記錄?僅供參考僅返回一個(故意輸入錯誤)。

回答

0

是的,您無意中創建了Book_TitleLoan之間的笛卡爾積。

試試這個:

HAVING COUNT(DISTINCT BC.Bt_id) > 1 
+0

嗨, MS Access 2007將返回語法錯誤(MISSING OPERATOR)與該更改。嘗試過UNIQUE也是一樣的錯誤消息。猜猜這可能是我的問題,遺憾的是我必須使用這些產品。 – AlasdairC 2009-11-06 00:32:28

+0

如果您在問題中提及您使用的是什麼技術,將來會有所幫助。 – 2009-11-06 00:40:56

+0

道歉,這將在未來做.. – AlasdairC 2009-11-06 00:43:28

0

爲什麼用括號麻煩?爲什麼不呢?

SELECT BT.Bt_Name, count(*) ct FROM Book_Title BT 

INNER JOIN Book_Copy BC on BT.Bt_id = BC.Bt_id 

INNER JOIN Loan L ON BC.Bc_id = L.Bc_id 

WHERE L.Date_back Is NULL 

GROUP BY BT.Bt_name HAVING COUNT(*) >1; 

或者我的棒有錯誤嗎?