none
Juiz do SQL diz que esta incorreto a instrução RRS feed

  • Pergunta

  •  Ola pessoal, eu estou tentando resolver um SQL bem,

     Esquema

     
    movies
    Coluna Tipo
    id (PK) numeric
    name varchar
    id_genres (FK) numeric
     


     
    genres
    Coluna Tipo
    id (PK) numeric
    description varchar
                   


     
    actors
    Coluna Tipo
    id (PK) integer
    name varchar
     

     
    movies_actors
    Coluna Tipo
    id_movies (FK) numeric
    id_actors (FK) numeric
     

     Tabelas

     
    movies
    id name id_genres
    1 Batman 3
    2 The Battle of the Dark River 3
    3 White Duck 1
    4 Breaking Barriers 4
    5 The Two Hours 2
     

     
    genres
    id description
    1 Animation
    2 Horror
    3 Action
    4 Drama
    5 Comedy
     

     
    actors
    id name
    1 Brad Antonio
    2 Marcelo Silva
    3 Miguel Silva
    4 Drake Frost
    5 Rodrigo Juares Rodriguez
     


     
    movies_actors
    id_movies id_actors
    1 1
    2 3
    2 2
    4 1
    5 2


    A saída é

    Para fazer isso, selecione o código e o nome dos filmes em que atuaram os atores ‘Marcelo Silva’ ou ‘Miguel Silva’ e que o gênero do filme seja 'Action'.]

     
    id name
    2 The Battle of the Dark River

    MINHA INSTRUÇÃO SQL

    SELECT MOVIES.ID, MOVIES.NAME FROM GENRES
    INNER JOIN MOVIES ON MOVIES.ID_GENRES = GENRES.ID
    INNER JOIN MOVIES_ACTORS ON MOVIES_ACTORS.ID_MOVIES = MOVIES.ID
    INNER JOIN ACTORS ON MOVIES_ACTORS.ID_ACTORS = ACTORS.ID
    WHERE ACTORS.NAME = 'Marcelo Siva' OR ACTORS.NAME = 'Miguel Silva' 
    AND GENRES.DESCRIPTION = 'Action';

    O resultado é igualzinho da saída em meus teste, queria saber a onde eu estou errando.

    <><><><><><><><><><><><><><><><><><><><><<><><><><><><><><><><><><><><><><><>

    Vou deixar o código para algum possível teste:

    CREATE TABLE genres (
      id numeric (10) PRIMARY KEY,
      description varchar(50)
    );
    
    CREATE TABLE movies (
      id numeric (10) PRIMARY KEY,
      name varchar(50),
      id_genres numeric REFERENCES genres (id)
    );
    
    CREATE TABLE actors (
      id numeric (10) PRIMARY KEY,
      name varchar(50)
    );
    
    CREATE TABLE movies_actors (
      id_movies numeric REFERENCES movies (id),
      id_actors numeric REFERENCES actors (id)
    ); 
    
    INSERT INTO genres (id, description) VALUES  (1,	'Animation');
    INSERT INTO genres (id, description) VALUES  (2,	'Horror');
    INSERT INTO genres (id, description) VALUES  (3,	'Action');
    INSERT INTO genres (id, description) VALUES  (4,	'Drama');
    INSERT INTO genres (id, description) VALUES  (5,	'Comedy');
      
    INSERT INTO movies (id, name, id_genres) VALUES (1,	'Batman',	3);
    INSERT INTO movies (id, name, id_genres) VALUES (2,	'The Battle of the Dark River',	3);
    INSERT INTO movies (id, name, id_genres) VALUES (3,	'White Duck',	1);
    INSERT INTO movies (id, name, id_genres) VALUES (4,	'Breaking Barriers',	4);
    INSERT INTO movies (id, name, id_genres) VALUES (5,	'The Two Hours',	2);
      
    INSERT INTO actors (id, name) VALUES (1,	'Brad Antonio');
    INSERT INTO actors (id, name) VALUES  (2,	'Marcelo Silva');
    INSERT INTO actors (id, name) VALUES  (3,	'Miguel Silva');
    INSERT INTO actors (id, name) VALUES  (4,	'Drake Frost');
    INSERT INTO actors (id, name) VALUES  (5,	'Rodrigo Juares Rodriguez');
        
    INSERT INTO movies_actors (id_movies, id_actors) VALUES   (1,1);
    INSERT INTO movies_actors (id_movies, id_actors) VALUES   (2,3);
    INSERT INTO movies_actors (id_movies, id_actors) VALUES   (2,2);
    INSERT INTO movies_actors (id_movies, id_actors) VALUES   (4,1);
    INSERT INTO movies_actors (id_movies, id_actors) VALUES   (5,2);


    sexta-feira, 18 de maio de 2018 00:08

Respostas

Todas as Respostas

  • Faz um teste
    SELECT MOVIES.ID, MOVIES.NAME, * FROM GENRES
    INNER JOIN MOVIES ON MOVIES.ID_GENRES = GENRES.ID
    INNER JOIN MOVIES_ACTORS ON MOVIES_ACTORS.ID_MOVIES = MOVIES.ID
    INNER JOIN ACTORS ON MOVIES_ACTORS.ID_ACTORS = ACTORS.ID
    WHERE (ACTORS.NAME = 'Marcelo Silva'  OR  ACTORS.NAME = 'Miguel Silva')
    AND GENRES.DESCRIPTION = 'Action';

    sexta-feira, 18 de maio de 2018 02:09
    • Marcado como Resposta salomão santos terça-feira, 22 de maio de 2018 20:01
    sexta-feira, 18 de maio de 2018 02:17
  • Na sua query o sobrenome ator Marcelo esta errado, por isso só carrega uma linha

    WHERE ACTORS.NAME = 'Marcelo Siva' 

    sexta-feira, 18 de maio de 2018 02:22
  • Deleted
    sexta-feira, 18 de maio de 2018 09:25
  • Carlos obrigado pela ajuda,

    Aprendi que eu não posso seguir o exemplo de saída desses exercícios, pois olhando as tabelas percebi que era para exibir três resultados

    2 The Battle of the Dark River
    2 The Battle of the Dark River
    5 The Two Hourso 


    Pois um dos atores fez o filme "The Two Hours" Graças a sua atenção no meu erro de ortografia (que eu não estava vendo por nada de tão viciado), conseguir enxergar a solução olhando a tabela MOVIES_ACTORS

    terça-feira, 22 de maio de 2018 20:09
  • José, no caso em específico, não posso usar DISTINCT, os resultados é para repetir mesmo.

    O exemplo de saída não é claro em relação o que pede, olhe na tabela MOVIE_ACTORS e observe que o resultado é mais completo do que pede da saída.



    terça-feira, 22 de maio de 2018 20:13
  • Deleted
    terça-feira, 22 de maio de 2018 21:03