在连接中重复

时间:2009-11-06 00:13:06

标签: sql ms-access join cartesian-product

以下SQL返回BT.Bt_NameL.date_back为空的BT.Bt_Name。我只想选择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)

对于L.Date_back为空的所有记录,导致{{1}}为> 1的连接是什么?仅供参考,应返回一个(故意输入错误)。

2 个答案:

答案 0 :(得分:0)

是的,您无意中在Book_TitleLoan之间创建了笛卡尔积。

试试这个:

HAVING COUNT(DISTINCT BC.Bt_id) > 1

答案 1 :(得分: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;

或者我有错误的结束?