2011-05-12 25 views
26

Necesito ejecutar una consulta Para recuperar datos de varias tablas, pero estoy bastante confundido sobre cómo hacerlo todo a la vez.Múltiples combinaciones de 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_Books y Writers_Books son las tablas intermedias que me ayude a poner en práctica muchas a muchas relaciones entre las tablas.

necesito una consulta individual con varias combinaciones para seleccionar:

  • título, edición, año, páginas, Clasificación de los libros
  • Categoría de Categorías
  • Editorial de Editores
  • Apellido de Escritores

Respuesta

99

Será algo como esto:

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 

se utiliza la instrucción join para indicar qué campos de la tabla Un mapa de la tabla B. Estoy usando alias aquí es por eso que se ve Books b la tabla Books se conoce como b en el resto de la consulta. Esto hace menos tipeo.

FYI su convención de nombres es muy extraño, yo esperaría que sea de la misma familia:

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, eh? ¿Por qué? –

+6

¿Has votado negativamente una respuesta perfectamente buena porque no estás de acuerdo con su razonamiento? ¿Debo desvirtuar su "respuesta" de razonamiento ya que no es una respuesta a la pregunta? +1. – Jaymz

+2

No, votamos buenas y correctas respuestas. – Jaymz

25

se puede usar algo como esto:

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

Genial, @kris también votó por ti. –

+0

@Josh, siempre que se divierta;) – krtek

+0

Suena bien, deshagámonos de uno de los principales diferenciadores del sitio. Vaya y publíquelo en meta.stackoverflow.com, vea lo que dicen. Estoy seguro de que todos estarán de acuerdo contigo. – Jaymz

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 
Cuestiones relacionadas