2011-05-12 108 views
26

我需要執行查詢要從多個表中檢索數據,但我很困惑如何一次完成所有操作。多個SQL連接

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_BooksWriters_Books是中間表來幫我實現很多的表之間的多對多關係。

我需要一個單獨的查詢與多個連接選擇:

  • 名稱,版本,年份,頁數從書本評級
  • 從類別類別從出版商
  • 名字
  • 出版商從作家

回答

99

它會是這樣的:

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 

您使用join語句來說明爲什麼你看到Books bBooks表將在查詢的其餘部分被稱爲b從表中的字段的地圖我使用的別名在這裏表B.多數民衆贊成。這使得輸入更少。

FYI你的命名約定很奇怪,我希望它更是這樣的:

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 
+2

Downvote,是吧?爲什麼? – 2011-05-12 19:07:20

+6

你低估了一個非常好的答案,因爲你不同意他們的推理?我是否應該降低你的推理「答案」,因爲它不是問題的答案? +1。 – Jaymz 2011-05-12 19:09:47

+2

不,我們贊成好的,正確的答案。 – Jaymz 2011-05-12 19:12:02

25

您可以使用這樣的事情:

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. 
+0

酷,@ kris也低估了你。 – 2011-05-12 19:10:49

+0

@Josh只要他有樂趣;) – krtek 2011-05-12 19:11:58

+0

聽起來不錯,讓我們擺脫該網站的主要差異之一。去和meta.stackoverflow.com發表,看看他們說什麼。我相信每個人都會同意你的看法。 – Jaymz 2011-05-12 19:16:01

2
SELECT 
B.Title, B.Edition, B.Year, B.Pages, B.Rating  --from Books 
, C.Category          --from Categories 
, P.Publisher          --from Publishers 
, W.LastName          --from Writers 

FROM Books B 

JOIN Categories_Books CB ON B._ISBN = CB._Books_ISBN 
JOIN Categories_Books CB ON CB.__Categories_Category_ID = C._CategoryID 
JOIN Publishers P ON B.PublisherID = P._Publisherid 
JOIN Writers_Books WB ON B._ISBN = WB._Books_ISBN 
JOIN Writers W ON WB._Writers_WriterID = W._WriterID