多个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
只会给出相同的结果。是的,我知道我的命名约定在这方面非常奇怪。回顾我正在执行的连接,首先让我感到困惑。谢谢你的帮助。