Estou com um problema básico em criar uma query para listar artistas com a condição do artista ter músicas com todo tipo de formato, o banco de dados tem três tabelas (ver diagrama ER).
A questão é: encontre todos os nomes de artistas com músicas em todos os tipos de mídia possíveis
e o MediaType está listado aqui:
- arquivo de áudio MPEG
- Arquivo de áudio AAC protegido
- Arquivo de vídeo MPEG-4 protegido. .
Eu tentei isso, mas fiquei preso na cláusula where
SELECT a.[Name]
FROM track t INNER JOIN Album alb ON t.AlbumId = alb.AlbumId
INNER JOIN Artist a ON alb.ArtistId = a.ArtistID
INNER JOIN MediaType m ON t.MediaTypeId = m.MediaTypeId
WHERE
Esta é uma visão geral das instruções SQL DDL:
CREATE TABLE MediaType ( MediaTypeId int(1) PRIMARY KEY, [Name] varchar(30) );
CREATE TABLE Artist(ArtistId int(3), [Name] varchar(100) ); -- LONG CHAR????
CREATE TABLE Album(AlbumId int(3) PRIMARY KEY, Title varchar(100), ArtistId int(3));
CREATE TABLE PlaylistTrack(TrackId int(4) PRIMARY KEY, [Name] varchar(220), AlbumId int(3),
MediaTypeId int(1), GenreId int(2), Composer varchar(220), Miliseconds int(12), Bytes int(12), UnitPrice decimal(8,2)); -- UnitPrice number
Esta é uma visão geral dos dados retomados: Tabela de artistas:
INSERT INTO `Artist` (`ArtistId`, `Name`) VALUES (1, N'AC/DC');
INSERT INTO `Artist` (`ArtistId`, `Name`) VALUES (2, N'Accept');
INSERT INTO `Artist` (`ArtistId`, `Name`) VALUES (3, N'Aerosmith');
INSERT INTO `Artist` (`ArtistId`, `Name`) VALUES (4, N'Alanis Morissette');
INSERT INTO `Artist` (`ArtistId`, `Name`) VALUES (5, N'Alice In Chains');
INSERT INTO `Artist` (`ArtistId`, `Name`) VALUES (6, N'Antônio Carlos Jobim');
INSERT INTO `Artist` (`ArtistId`, `Name`) VALUES (7, N'Apocalyptica');
INSERT INTO `Artist` (`ArtistId`, `Name`) VALUES (8, N'Audioslave');
INSERT INTO `Artist` (`ArtistId`, `Name`) VALUES (9, N'BackBeat');
INSERT INTO `Artist` (`ArtistId`, `Name`) VALUES (10, N'Billy Cobham');
.
.
Tabela do álbum:
INSERT INTO `Album` (`AlbumId`, `Title`, `ArtistId`) VALUES (1, N'For Those About To Rock We Salute You', 1);
INSERT INTO `Album` (`AlbumId`, `Title`, `ArtistId`) VALUES (2, N'Balls to the Wall', 2);
INSERT INTO `Album` (`AlbumId`, `Title`, `ArtistId`) VALUES (3, N'Restless and Wild', 2);
INSERT INTO `Album` (`AlbumId`, `Title`, `ArtistId`) VALUES (4, N'Let There Be Rock', 1);
.
.
Tabela de rastreamento:
INSERT INTO `Track` (`TrackId`, `Name`, `AlbumId`, `MediaTypeId`, `GenreId`, `Composer`, `Milliseconds`, `Bytes`, `UnitPrice`) VALUES (1, N'For Those About To Rock (We Salute You)', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 343719, 11170334, 0.99);
INSERT INTO `Track` (`TrackId`, `Name`, `AlbumId`, `MediaTypeId`, `GenreId`, `Milliseconds`, `Bytes`, `UnitPrice`) VALUES (2, N'Balls to the Wall', 2, 2, 1, 342562, 5510424, 0.99);
INSERT INTO `Track` (`TrackId`, `Name`, `AlbumId`, `MediaTypeId`, `GenreId`, `Composer`, `Milliseconds`, `Bytes`, `UnitPrice`) VALUES (3, N'Fast As a Shark', 3, 2, 1, N'F. Baltes, S. Kaufman, U. Dirkscneider & W. Hoffman', 230619, 3990994, 0.99);
INSERT INTO `Track` (`TrackId`, `Name`, `AlbumId`, `MediaTypeId`, `GenreId`, `Composer`, `Milliseconds`, `Bytes`, `UnitPrice`) VALUES (4, N'Restless and Wild', 3, 2, 1, N'F. Baltes, R.A. Smith-Diesel, S. Kaufman, U. Dirkscneider & W. Hoffman', 252051, 4331779, 0.99);
INSERT INTO `Track` (`TrackId`, `Name`, `AlbumId`, `MediaTypeId`, `GenreId`, `Composer`, `Milliseconds`, `Bytes`, `UnitPrice`) VALUES (5, N'Princess of the Dawn', 3, 2, 1, N'Deaffy & R.A. Smith-Diesel', 375418, 6290521, 0.99);
INSERT INTO `Track` (`TrackId`, `Name`, `AlbumId`, `MediaTypeId`, `GenreId`, `Composer`, `Milliseconds`, `Bytes`, `UnitPrice`) VALUES (6, N'Put The Finger On You', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 205662, 6713451, 0.99);
INSERT INTO `Track` (`TrackId`, `Name`, `AlbumId`, `MediaTypeId`, `GenreId`, `Composer`, `Milliseconds`, `Bytes`, `UnitPrice`) VALUES (7, N'Let''s Get It Up', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 233926, 7636561, 0.99);
.
.
Tabela de tipos de mídia:
INSERT INTO `MediaType` (`MediaTypeId`, `Name`) VALUES (1, N'MPEG audio file');
INSERT INTO `MediaType` (`MediaTypeId`, `Name`) VALUES (2, N'Protected AAC audio file');
INSERT INTO `MediaType` (`MediaTypeId`, `Name`) VALUES (3, N'Protected MPEG-4 video file');
INSERT INTO `MediaType` (`MediaTypeId`, `Name`) VALUES (4, N'Purchased AAC audio file');
INSERT INTO `MediaType` (`MediaTypeId`, `Name`) VALUES (5, N'AAC audio file');
Meu mysql não funciona no momento para exibir um diagrama ER, mas posso desenhar com tinta
Entendo que meu problema está relacionado à cláusula join, mas consigo descobrir como executar essa consulta.
Todos os créditos para @Akina por me dar dicas.
Esta consulta funciona: