我是SQL
的新手并且正在为我的大学作业进行查询......我在数据库中有三个表:
1。学生:
studentid pk
fname
school
2。书:
bookid pk
bookname
第3。问题:
issueid pk
studentid fk
bookid fk
fine
我试图解决这个问题:
为已发行两本或更多图书的学生选择bookname
和平均fine
。
我尝试使用嵌套的INNER JOIN
作为:
SELECT fname,bookname,AVG(fine) FROM
student INNER JOIN ( books INNER JOIN issue ON books.bookid=issue.bookid) ON
student.studentid=issue.issueid
GROUP BY fname
HAVING COUNT(bookid)>1;
但失败了。如果有任何错误,或者如上所述嵌套JOIN
是完全错误的吗?或者,如果有另一种方法可以使用JOIN
,请提示我。
答案 0 :(得分:1)
您可以执行两个单独的连接:
SELECT fname,bookname,AVG(fine)
FROM student
INNER JOIN issue ON student.studentid=issue.issueid
INNER JOIN books ON books.bookid=issue.bookid
GROUP BY fname
HAVING COUNT(bookid)>1;
另一种可能性是在同一INNER JOIN
:
SELECT fname,bookname,AVG(fine)
FROM student
INNER JOIN (issue, books) ON (student.studentid=issue.issueid AND books.bookid=issue.bookid)
GROUP BY fname
HAVING COUNT(bookid)>1;
您的查询错误的原因只是您没有使用正确的语法......:没有嵌套连接这样的东西。
This page是连接的MySQL文档页面。您将找到许多如何处理连接的示例。
答案 1 :(得分:1)
这个应该有效。您可以在彼此之后追加INNER JOIN,并在ON参数之后使用任何先前调用的表的值。
SELECT student.fname, books.bookname, AVG(issue.fine)
FROM student
INNER JOIN issue ON issue.studentid = student.studentid
INNER JOIN books ON books.bookid = issue.bookid
GROUP BY student.fname
HAVING COUNT(books.bookid)>1