2009-11-06 7 views
0

следующий SQL возвращается каждый BT.Bt_Name, где L.date_back - Null. Я только хочу, чтобы выбрать 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 Is NULL? FYI должен быть возвращен только один (преднамеренная ошибка ввода).

ответ

0

Да, вы непреднамеренно создаете декартово произведение между Book_Title и Loan.

Попробуйте это:

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

hi, MS Access 2007 возвращает SYNTAX ERROR (MISSING OPERATOR) с этим изменением. Попробовали UNIQUE также и такое же сообщение об ошибке. Думаю, это может быть моей проблемой, к сожалению, я должен использовать эти продукты. – AlasdairC

+0

В будущем это поможет, если вы укажете в своем вопросе, какую технологию вы используете. –

+0

Приносим извинения за это, сделаем в будущем .. – AlasdairC

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; 

Или у меня неправильный конец палки?

Смежные вопросы