Mysql 如何嵌套内部联接?

Mysql 如何嵌套内部联接?,mysql,sql,database,join,Mysql,Sql,Database,Join,我是SQL的新手,正在练习查询我的大学作业……数据库中有三个表: 1。学生: studentid pk fname school bookid pk bookname issueid pk studentid fk bookid fk fine 2。书籍: studentid pk fname school bookid pk bookname issueid pk studentid fk bookid fk fine 3。问题: studentid pk

我是
SQL
的新手,正在练习查询我的大学作业……数据库中有三个表:

1。学生:

studentid pk

fname

school
bookid pk

bookname
issueid pk

studentid fk

bookid fk

fine
2。书籍:

studentid pk

fname

school
bookid pk

bookname
issueid pk

studentid fk

bookid fk

fine
3。问题:

studentid pk

fname

school
bookid pk

bookname
issueid pk

studentid fk

bookid fk

fine
我正试图解决这个问题:

为已发行两本或两本以上书籍的学生选择
书名
和平均
罚款

我已尝试使用嵌套的
内部联接作为:

 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
s是否有任何错误或完全错误?或者,如果有其他方法可以使用
JOIN

执行此操作,请提示我您可以执行两个单独的连接:

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;
另一种可能是在同一
内部联接中联接多个表:

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;
查询出错的原因很简单,就是您没有使用正确的语法…:没有嵌套联接


是连接的MySQL文档页面。您将发现许多处理联接的示例。

这一个应该有效。可以在内部联接之后追加,并在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

你错了,只是因为你没有使用正确的语法。我会尽力为我的答案添加更多信息。谢谢。如果你给出你所做的示例,那将非常有帮助。julienc的答案不正确,因为你必须将表名(或者至少是别名,如果设置)放在列名之前。此外,julienc将问题表绑定到问题表的issueid上,该issueid应为studentid。如果没有歧义,则不必使用别名。以及…上的
中的术语顺序一点都不重要。这与术语顺序无关。您已经编写了student.studentid=issue.issueid。正确的应该是student.studentid=issue.studentid。您引用了错误的值。嗯,这一个可以。事实上,我复制并通过了OP的查询,错误已经在里面了…我检查了另一个问题,你是对的。SELECT语句中的所有列名都是唯一的,因此无需在其前面追加表名或其别名。