Mysql SQL给我的行不';不存在?

Mysql SQL给我的行不';不存在?,mysql,sql,Mysql,Sql,在使用时: SELECT borrowbook.studentusername, borrowbook.schoolbookid,borrowbook.date,borrowbook.deadline, book.title, student.email, student.fname, student.lname FROM borrowbook, book, student 我得到了很多行,但在我的数据库中,我在借阅簿表中只有四行,在使用它时,我得到了一些不存在的“行”。(注意:这是通过网站上

在使用时:

SELECT borrowbook.studentusername, borrowbook.schoolbookid,borrowbook.date,borrowbook.deadline, book.title, student.email, student.fname, student.lname
FROM borrowbook, book, student
我得到了很多行,但在我的数据库中,我在借阅簿表中只有四行,在使用它时,我得到了一些不存在的“行”。(注意:这是通过网站上的php实现的,我似乎无法在mysql中实现,所以我想我已经做了一些事情)

就像这样,一个人借了一本书(我的借书清单中的第1行)突然借了十本不同的书,而我没有登记任何人借书。还有贷款的日期,最后期限是我登记的四行中的一行

即使是登记借一本书的同一个人,也会突然出现,好像他们借了四次书,日期不同。日期和截止日期取自“借阅簿”,而不同的学生姓名取自另一个表,因为他们从未在“借阅簿”行中使用过

我现在用不同的方式、不同的内容和不同的表格尝试了这一点,但仍然得到许多未注册的“虚构”贷款


我知道的很少,但我很感激能得到的一切帮助。文章也有帮助。

您在查询中没有指定任何连接条件,因此表将被
交叉连接
-ed,即
借阅簿
表中的每条记录与
书籍
表中的每条记录配对,然后与
学生
表中的每条记录配对。因此,如果在每个表中分别有X、Y和Z个记录,那么将得到X*Y*Z个记录

您可能需要添加连接条件,例如(我只是猜测列名):


如果没有联接,则会复制记录。为了更好的实践,应该使用显式连接而不是隐式连接。如果您有student.username和book.id字段,则可以执行以下操作:

SELECT borrowbook.studentusername, borrowbook.schoolbookid,borrowbook.date,borrowbook.deadline,
  book.title,
  student.email, student.fname, student.lname
FROM borrowbook
  INNER JOIN student ON borrowbook.studentusername=student.username
  INNER JOIN schoolbook ON borrowbook.schoolbookid=schoolbook.id
  INNER JOIN book ON schoolbook.isbn=book.isbn
  ;


您已经创建了多个隐式联接。您应该显式定义连接,而不是让MySQL猜测它们是如何工作的。并且必须在WHERE子句中指定隐式连接,如WHERE BROWBOOK.schoolbookid=book.schoolbookid……这是否回答了您的问题@ceejayoz只是澄清一下,MySQL不会“猜测”它们是如何工作的。如果没有指定连接条件,它将始终交叉连接表。我尝试了连接,在哪里使用了您建议的连接,得到了相同的结果,但我不知道“内部连接”和“打开”的功能。但是,教科书和书本之间的连接在哪里呢?我有一张桌子,上面有这本书的信息,还有一张桌子,上面有学校所有版本的那本书。我应该只添加一个内部联接表吗?isbn=schoolbook.isbn?如果您的选择中暗示了schoolbook表,您应该添加它。@soi,我已经为schoolbook表添加了联接。但是我很难添加所有不同的表,我有四个表(或者五个表,但我现在不需要最后一个表)a B C C C由D和B连接,A连接到B。我需要一条“线”或者A到B,然后B到C之间的连接,这样我就可以从A到B得到正确的信息。这有意义吗?像这样:“作者书籍教科书借阅学生”我需要关于作者、书籍和教科书的信息,以及与书籍借阅有关的学生的信息,如果有意义的话?@soi然后使用适当的列连接表,例如
A连接B on A.x=B.y连接C on B.z=C.w连接D on…
SELECT borrowbook.studentusername, borrowbook.schoolbookid,borrowbook.date,borrowbook.deadline,
  book.title,
  student.email, student.fname, student.lname
FROM borrowbook
  INNER JOIN student ON borrowbook.studentusername=student.username
  INNER JOIN schoolbook ON borrowbook.schoolbookid=schoolbook.id
  INNER JOIN book ON schoolbook.isbn=book.isbn
  ;