2009-11-06 64 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; 

或者我的棒有错误吗?