web-dev-qa-db-fra.com

Jointures SQL multiples

J'ai besoin d'exécuter une requête Pour récupérer des données de plusieurs tables mais je suis plutôt confus sur la façon de tout faire en même temps.

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 et Writers_Books sont les tables intermédiaires pour m'aider à implémenter plusieurs à plusieurs relations entre les tables.

J'ai besoin d'une seule requête avec plusieurs jointures pour sélectionner:

  • Titre, édition, année, pages, évaluation des livres
  • Catégorie de catégories
  • Éditeur des éditeurs
  • Nom des écrivains
33
GGe

Ce sera quelque chose comme ça:

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

Vous utilisez l'instruction join pour indiquer les champs de la table A à la table B. J'utilise ici des alias, c'est pourquoi vous voyez Books b la table Books sera appelée b dans le reste de la requête. Cela rend moins de frappe.

Pour info votre convention de nommage est très étrange, je m'attendrais à ce qu'elle ressemble plus à ceci:

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
109
Josh M.

Vous pouvez utiliser quelque chose comme ceci:

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.
26
krtek
 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
3
Yonas