多个SQL连接

GGe*_*GGe 34 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, LastName
Writers_Books: _Writers_WriterID, _Books_ISBN
Run Code Online (Sandbox Code Playgroud)

Categories_BooksWriters_Books在中间表,以帮助我实现很多的表之间的多对多关系.

我需要一个具有多个连接的单个查询来选择:

  • 标题,版本,年份,页面,书籍评级
  • 类别中的类别
  • 出版商的出版商
  • 作家姓氏

Jos*_* M. 110

它将是这样的:

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
Run Code Online (Sandbox Code Playgroud)

您可以使用该join语句指示表A中的哪些字段映射到表B.我在这里使用别名,这就是为什么您看到Books bBooks表将b在查询的其余部分中被引用.这样可以减少打字.

仅供参考,您的命名惯例很奇怪,我希望它更像是这样:

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
Run Code Online (Sandbox Code Playgroud)


krt*_*tek 26

你可以使用这样的东西:

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.
Run Code Online (Sandbox Code Playgroud)

  • 我很高兴得到像这样的答案krtek,当我搜索"sql multiple join"时,它们出现在Google中,并作为所有未来用户的参考. (8认同)
  • @Kris这可能是功课,但是sql查询真的很简单,所以最好的学习方法是,在我看来,阅读查询,一切都很直接,这样他就会学习正确的语法. (3认同)
  • `INNER` 是可选的。`JOIN` 只会给出相同的结果。 (2认同)