【问题标题】:MYSQL : what kind of join should i use here?MYSQL:我应该在这里使用什么样的连接?
【发布时间】:2019-11-29 19:06:58
【问题描述】:

我正在尝试显示作者姓名以 J 开头的所有书籍。 但我有两个表:表书(有书名和作者 ID(FK)) 和作者表(具有作者 ID(PK)) 我使用此代码加入他们,但它不断给我错误:

select BookID,Name
from Books_Mozon as us
join Author_Mozon as re
where re.Name like'J%';

请帮助我,谢谢!

【问题讨论】:

  • 请编辑您的问题并添加您的错误信息。
  • SQL Server MySQL。您真正使用的是什么 RDBMS?请标记您正在使用的 DBMS。
  • 如果您有一个作者的名字以J 开头,但由于某种原因在Books_Mozon 表中没有书籍,您还想查看该作者的名字吗?

标签: mysql sql mysql-workbench


【解决方案1】:

您应该使用右连接,因为您希望所有作者都以 J 开头,而不考虑表中的其他常见细节,并且作者的大多数信息将出现在作者表中。

 select us.BookID,re.Name
from Books_Mozon as us
right join Author_Mozon as re
on
    us.AuthorID=re.AuthorID
   where re.Name like'J%';

【讨论】:

  • 现在它给出了这个错误 ERROR 1054 (42S22): Unknown column 're.BookID' in 'on clause'
  • 这是因为我假设外键是 BookId。检查什么是作者表键。哪些字段在作者和其他表之间是通用的
  • Books_Mozon 有 BookID 作为主键和 AuthorID 作为外键, Authour_Mozon 有 AuthorID 作为主键并且它有一个包含作者姓名的列 Name..
  • 将 bookid 更改为授权更新运行,如果它不工作
  • OP 想要显示作者姓名以J 开头的所有书籍。如果数据库中碰巧有一个作者的名字以J 开头,而Books_Mozon 表中没有代表的书籍,那么使用右连接将导致bookIDNULL。要么最初的问题措辞不佳,而且 OP 真的根本不关心书籍(但是为什么不只看Author_Mozon 表),或者这 不是 OP 想要的。我不认为你想使用除了内部连接之外的任何东西,以便检索实际的书籍。
猜你喜欢
  • 2011-01-19
  • 2017-08-11
  • 2017-05-27
  • 2016-05-05
  • 1970-01-01
  • 2022-06-11
  • 2019-12-14
  • 2020-06-12
  • 1970-01-01
相关资源
最近更新 更多