У меня есть три таблицы: Book, в которой хранятся id, title и т. Д.
member, который содержит id, name и т. Д.
и loan, который содержит member_id, book_id, returnDate и т. д.

Я пытаюсь написать запрос, который вернет мне все данные о членах, если они одолжили 3 или менее трех книг. Пока у меня есть:

SELECT * FROM member m 
JOIN member_loans_book mlb ON m.id = mlb.Member_id 
  HAVING count(mlb.Book_id) <= 3

И он компилируется, но ничего не возвращает, я ошибаюсь?
любые указатели приветствуются.

0
HammockKing 3 Апр 2014 в 21:34
Добавьте предложение GROUP BY m.id и рассмотрите WHERE, а не HAVING
 – 
RobP
3 Апр 2014 в 21:36
1
Попробуйте использовать LEFT JOIN, поскольку могут быть люди, которые даже не одолжили ни одной книги.
 – 
user2989408
3 Апр 2014 в 21:36
Просто замечание о пользователе ... последний комментарий я сам заполнил его, поэтому я знаю, что он должен что-то вернуть (если мое утверждение было правильным, в чем я сомневаюсь), но я понимаю, что вы имеете в виду, если никого нет, так что ура
 – 
HammockKing
3 Апр 2014 в 21:42

1 ответ

Лучший ответ

См. sqlFiddle.

SELECT m.MemberId, m.Name, COUNT(*)
FROM Member m
JOIN Loan l ON m.MemberId = l.MemberId
GROUP BY m.MemberId, m.Name
HAVING COUNT(*) <= 3
0
Tom 3 Апр 2014 в 21:47
Вот именно, большое спасибо
 – 
HammockKing
3 Апр 2014 в 23:27