Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个SQL联接_Sql_Sqlite_Join - Fatal编程技术网

多个SQL联接

多个SQL联接,sql,sqlite,join,Sql,Sqlite,Join,我需要执行一个查询来从多个表中检索数据,但我对如何一次完成这一切感到相当困惑 Books: _ISBN , BookTitle, Edition, Year, PublisherID, Pages, Rating Categories: _CategoryID, Category Categories_Books: _Categories_Category_ID, _Books_ISBN Publishers: _Publisherid, Publisher Writers: _WriterID

我需要执行一个查询来从多个表中检索数据,但我对如何一次完成这一切感到相当困惑

Books: _ISBN , BookTitle, Edition, Year, PublisherID, Pages, Rating
Categories: _CategoryID, Category
Categories_Books: _Categories_Category_ID, _Books_ISBN
Publishers: _Publisherid, Publisher
Writers: _WriterID, LastName
Writers_Books: _Writers_WriterID, _Books_ISBN
Categories\u Books
Writers\u Books
是帮助我实现表之间多对多关系的中间表

我需要一个包含多个联接的查询来选择:

  • 书名、版本、年份、页数、书籍评级
  • 类别中的类别
  • 从出版商到出版商
  • 作者的姓氏

    • 它将是这样的:

      SELECT b.Title, b.Edition, b.Year, b.Pages, b.Rating, c.Category, p.Publisher, w.LastName
      FROM
          Books b
          JOIN Categories_Book cb ON cb._ISBN = b._Books_ISBN
          JOIN Category c ON c._CategoryID = cb._Categories_Category_ID
          JOIN Publishers p ON p._PublisherID = b.PublisherID
          JOIN Writers_Books wb ON wb._Books_ISBN = b._ISBN
          JOIN Writer w ON w._WritersID = wb._Writers_WriterID
      
      Book: ID, ISBN , BookTitle, Edition, Year, PublisherID, Pages, Rating
      Category: ID, [Name]
      BookCategory: ID, CategoryID, BookID
      Publisher: ID, [Name]
      Writer: ID, LastName
      BookWriter: ID, WriterID, BookID
      
      您可以使用
      join
      语句来指示表A中哪些字段映射到表B。我在这里使用别名,这就是您看到
      Books B
      的原因
      Books
      表在查询的其余部分将被称为
      B
      。这样可以减少打字

      仅供参考,您的命名约定非常奇怪,我希望它更像这样:

      SELECT b.Title, b.Edition, b.Year, b.Pages, b.Rating, c.Category, p.Publisher, w.LastName
      FROM
          Books b
          JOIN Categories_Book cb ON cb._ISBN = b._Books_ISBN
          JOIN Category c ON c._CategoryID = cb._Categories_Category_ID
          JOIN Publishers p ON p._PublisherID = b.PublisherID
          JOIN Writers_Books wb ON wb._Books_ISBN = b._ISBN
          JOIN Writer w ON w._WritersID = wb._Writers_WriterID
      
      Book: ID, ISBN , BookTitle, Edition, Year, PublisherID, Pages, Rating
      Category: ID, [Name]
      BookCategory: ID, CategoryID, BookID
      Publisher: ID, [Name]
      Writer: ID, LastName
      BookWriter: ID, WriterID, BookID
      

      您可以使用以下内容:

      SELECT
          Books.BookTitle,
          Books.Edition,
          Books.Year,
          Books.Pages,
          Books.Rating,
          Categories.Category,
          Publishers.Publisher,
          Writers.LastName
      FROM Books
      INNER JOIN Categories_Books ON Categories_Books._Books_ISBN = Books._ISBN
      INNER JOIN Categories ON Categories._CategoryID = Categories_Books._Categories_Category_ID
      INNER JOIN Publishers ON Publishers._Publisherid = Books.PublisherID
      INNER JOIN Writers_Books ON Writers_Books._Books_ISBN = Books._ISBN
      INNER JOIN Writers ON Writers.Writers_Books = _Writers_WriterID.
      

      听起来不错,让我们去掉网站的一个主要区别。去meta.stackoverflow.com上发布,看看他们怎么说。我相信每个人都会同意你的观点。@Kris这可能是家庭作业,但sql查询非常简单,所以在我看来,最好的学习方法是阅读查询,一切都是直截了当的,这样他就可以学习正确的语法。我为这样的回答感到高兴,当我搜索“sql多重连接”时,他们会出现在谷歌上并作为所有未来用户的参考。
      internal
      是可选的
      JOIN
      只会给出相同的结果。是的,我知道我的命名约定在这方面非常奇怪。回顾我正在执行的连接,首先让我感到困惑。谢谢你的帮助。