cefalonx 0 Denunciar post Postado Dezembro 18, 2009 Bom dia Galera, Seguinte, tenho que fazer um exercicio : 9. Executar uma Query que realiza a leitura nas tabelas LOCACAO, CLIENTE, COPIA, FILME e GENERO, utilizando subquery do tipo IN-LINE VIEW, para mostrar os filmes de clientes que realizaram mais que 3 locações e mostrando o gênero do mesmo. Mostrar o resultado, seguindo os itens exemplificados abaixo: Cliente Gênero Filme Ano Produção ----------------------- ----------- --------------------------------- ------------ ... consegui trazer somente o nome dos clientes que tem mais de 3 locações, mas quando adiciono os outros campoas, dá erro dizendo que não é expressão group by... poderiam me ajudar... código que somente traz o nome do cliente SELECT CLI.TX_NOME_CLIENTE AS "Cliente" FROM (SELECT ID_CLIENTE, ID_COPIA FROM LOCACAO) LOC JOIN (SELECT ID_CLIENTE, TX_NOME_CLIENTE FROM CLIENTE) CLI ON (cli.id_cliente = LOC.id_cliente) JOIN (SELECT ID_FILME, ID_COPIA FROM COPIA) CO ON (LOC.ID_COPIA = CO.ID_COPIA) JOIN (SELECT ID_FILME, ID_GENERO, TX_TITULO_FILME, TX_ANO_FILME FROM FILME) FI ON (FI.ID_FILME = CO.ID_FILME) GROUP BY CLI.tx_nome_cliente HAVING COUNT(LOC.ID_CLIENTE) >= 3 ORDER BY CLI.tx_nome_cliente código qeu teoricamente era para trazer tudo: SELECT CLI.TX_NOME_CLIENTE AS "Cliente", (SELECT tx_descr_genero FROM GENERO WHERE ID_GENERO = FI.ID_GENERO) as "Gênero", FI.tx_titulo_filme AS "Filme", FI.TX_ANO_FILME AS "Ano Produção" FROM (SELECT ID_CLIENTE, ID_COPIA FROM LOCACAO) LOC JOIN (SELECT ID_CLIENTE, TX_NOME_CLIENTE FROM CLIENTE) CLI ON (cli.id_cliente = LOC.id_cliente) JOIN (SELECT ID_FILME, ID_COPIA FROM COPIA) CO ON (LOC.ID_COPIA = CO.ID_COPIA) JOIN (SELECT ID_FILME, ID_GENERO, TX_TITULO_FILME, TX_ANO_FILME FROM FILME) FI ON (FI.ID_FILME = CO.ID_FILME) GROUP BY CLI.tx_nome_cliente HAVING COUNT(LOC.ID_CLIENTE) >= 3 ORDER BY CLI.tx_nome_cliente quem puder me ajudar agradeço ! Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Dezembro 18, 2009 Tente ... SELECT CLI.TX_NOME_CLIENTE AS "Cliente", (SELECT tx_descr_genero FROM GENERO WHERE ID_GENERO = FI.ID_GENERO) as "Gênero", FI.tx_titulo_filme AS "Filme", FI.TX_ANO_FILME AS "Ano Produção" FROM (SELECT ID_CLIENTE, ID_COPIA FROM LOCACAO) LOC JOIN (SELECT ID_CLIENTE, TX_NOME_CLIENTE FROM CLIENTE) CLI ON (cli.id_cliente = LOC.id_cliente) JOIN (SELECT ID_FILME, ID_COPIA FROM COPIA) CO ON (LOC.ID_COPIA = CO.ID_COPIA) JOIN (SELECT ID_FILME, ID_GENERO, TX_TITULO_FILME, TX_ANO_FILME FROM FILME) FI ON (FI.ID_FILME = CO.ID_FILME) GROUP BY CLI.tx_nome_cliente, (SELECT tx_descr_genero FROM GENERO WHERE ID_GENERO = FI.ID_GENERO) HAVING COUNT(LOC.ID_CLIENTE) >= 3 ORDER BY CLI.tx_nome_cliente Compartilhar este post Link para o post Compartilhar em outros sites
cefalonx 0 Denunciar post Postado Dezembro 18, 2009 Opa, tudo bem Motta, Deu esse erro : ORA-22818: expressões de subconsulta não permitidas aqui 22818. 00000 - "subquery expressions not allowed here" *cause: an attempt was made to use a subquery expression where these are not supported. *Action: Rewrite the statemnt without the subquery expression Código de fornecedor 22818Erro na linha 44Coluna:13 Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Dezembro 18, 2009 Põe o (SELECT tx_descr_genero FROM GENERO WHERE ID_GENERO = FI.ID_GENERO) como uma tabela virtual. Compartilhar este post Link para o post Compartilhar em outros sites
cefalonx 0 Denunciar post Postado Dezembro 18, 2009 Assim ? SELECT CLI.TX_NOME_CLIENTE AS "Cliente", G.TX_DESCR_GENERO as "Gênero", FI.tx_titulo_filme AS "Filme", FI.TX_ANO_FILME AS "Ano Produção" FROM (SELECT ID_CLIENTE, ID_COPIA FROM LOCACAO) LOC JOIN (SELECT ID_CLIENTE, TX_NOME_CLIENTE FROM CLIENTE) CLI ON (cli.id_cliente = LOC.id_cliente) JOIN (SELECT ID_FILME, ID_COPIA FROM COPIA) CO ON (LOC.ID_COPIA = CO.ID_COPIA) JOIN (SELECT ID_FILME, ID_GENERO, TX_TITULO_FILME, TX_ANO_FILME FROM FILME) FI ON (FI.ID_FILME = CO.ID_FILME) JOIN (SELECT ID_GENERO, tx_descr_genero FROM GENERO) G ON (G.ID_GENERO = FI.ID_GENERO) GROUP BY CLI.tx_nome_cliente, (SELECT tx_descr_genero FROM GENERO WHERE ID_GENERO = FI.ID_GENERO) HAVING COUNT(LOC.ID_CLIENTE) >= 3 ORDER BY CLI.tx_nome_cliente Coloquei assim e dá o mesmo erro Compartilhar este post Link para o post Compartilhar em outros sites