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语句中的所有列名都是唯一的,因此无需在其前面追加表名或其别名。