如何嵌套内连接?

时间:2014-07-19 09:51:28

标签: mysql sql database join

我是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,请提示我。

2 个答案:

答案 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