Несколько SQL-соединений - PullRequest
32 голосов
/ 12 мая 2011

Мне нужно выполнить запрос, чтобы извлечь данные из нескольких таблиц, но я не совсем понимаю, как сделать все это одновременно.

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_Books и Writers_Books - это промежуточные таблицы, которые помогают мне реализовать множество связей между таблицами.

Мне нужен один запрос с несколькими объединениями для выбора:

  • Заголовок, издание, год, страницы, рейтинг из книг
  • Категория из категорий
  • Издатель от издателей
  • Фамилия от писателей

Ответы [ 3 ]

108 голосов
/ 12 мая 2011

Это будет примерно так:

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 b таблица Books в остальной части запроса будет именоваться 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
26 голосов
/ 12 мая 2011

Вы можете использовать что-то вроде этого:

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.
3 голосов
/ 25 декабря 2014
 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...