Ir para conteúdo
mnunesd12

Dúvida com Join

Recommended Posts

Ola Pessoal, 

Recentemente comecei a estudar banco de dados por conta própria, para isso estou utilizando o mysql e "brincando" com o banco de dados de uma locadora que vem de exemplo no mysql, chamado sikila.

Eu queria saber como eu faço uma query para selecionar os todos os clientes que já alugaram o mesmo filme em momentos diferentes.

 

Select 
		fm.film_id,
		fm.title
        cus.customer_id,
		concat( cus.first_name, " ", cus.last_name) as Nome
from
		film as fm
    inner join
		inventory as inv on fm.film_id = inv.film_id
	inner join
		rental as rt on inv.inventory_id = rt.inventory_id
	inner join
		customer as cus on rt.customer_id = cus.customer_id
	Where
		rt.customer_id = 49
	and
		rt.customer_id = 127

Nessa query eu sei que os customers números 49 e 127, já alugaram o mesmo filme, porém, não sei por qual motivo, a query não resulta em nada.

Caso necessitem de mais informações fiquem à vontade para solicitar.

Obrigado pela ajuda

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dica , tente contar os distintos (DISTINCT) clientes que alugaram a mesma fita em datas diferentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 horas atrás, Motta disse:

Dica , tente contar os distintos (DISTINCT) clientes que alugaram a mesma fita em datas diferentes.

Pois é, eu esqueci de falar, mas eu já usei o distinct também e o resultado foi o mesmo, não retornou nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, foi mal a demora...

 Vamos lá. A query e aquela mesma que esta no post original, no caso eu sei que estes dois clientes (49 e 227) já alugaram o mesmo filme em momentos distintos, porém a query retorna em branco. 

Quanto à modelagem, eu to usando uma que já vem de exemplo no próprio mysql workbench. espero que seja o suficiente.sakila.thumb.png.c56700aa415fbf853855a88578dce86f.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este sql seria  base 

 

select custumer_id,inventory_id
from   rental
group by custumer_id,inventory_id
having count(*) >= 2

par cliente/item alugados mais de uma vez 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por lemanoel
      oi, sou novo por aqui! desculpe se a pergunta é muito simples.... tenho duas tabelas:
      TABELA: atendimento: cd_item data_atend nome_cliente TABELA: documento_clinico cd_doc cd_item data_doc  
      o tenho a relação 1 atendimento para muitos docs. Quero criar um código que diz o número do atendimento e a data do doc mais antigo (apenas 1).  todas as tentativas duplicam o nome do cliente
    • Por luizfabianochaves
      buenas pessoal..
       
      estou com um problema em um comparativo entre duas tabelas.. uma tabela eu tenho o o resultado das metas e do mix de produtos vendidos na empresa.. calça, camisa, casacos.. etc..
      na outra tabela esta o resultado da venda desses produtos.. preciso de um comparativo que me dê o resultado do que foi vendido.. mas o que não foi vendido liste tambem.. quando comparo a coluna MIX_PRODUTO como igual ela traz o resultado da venda correta mas só o que o representante vendeu.. como está na imagem..
      quando comparo como diferente ele traz todo o mix.. mas ele lista a soma da venda para todo o mix no caso ali embaixo 110 peças e diminui a quantidade vendida... 
      o que preciso é que fique como na segunda imagem.. listando todo o mix, mas aparecendo somente a venda que tem na imagem 1... me fiz entender?
      SELECT  A.CD_MARCA, A.DS_MARCA, A.CD_REPRESENTANTE, A.NM_REPRESENTANTE ,A.DS_MUNICIPIO ,A.DS_SIGLA_EST ,A.CD_CLIENTE ,A.NM_CLIENTE,D.MIX_PRODUTO ,SUM(A.QT_SALDO) as QT_REAL FROM IM_DEMANDA A INNER JOIN IM_PERFORMANCE_MIX D ON (D.CD_PERIODO = A.CD_PERIODO) AND (D.CD_MARCA = A.CD_MARCA) AND (D.CD_REPRESENTANTE = A.CD_REPRESENTANTE) AND (D.MIX_PRODUTO = A.MIX_PRODUTO) WHERE A.CD_CLIENTE = '379' AND A.CD_MARCA = '3' AND A.CD_PERIODO = '8' GROUP BY A.CD_MARCA, A.DS_MARCA, A.CD_REPRESENTANTE, A.NM_REPRESENTANTE, A.DS_MUNICIPIO, A.DS_SIGLA_EST ,A.CD_CLIENTE ,A.NM_CLIENTE ,D.MIX_PRODUTO
      SELECT  A.CD_MARCA, A.DS_MARCA, A.CD_REPRESENTANTE, A.NM_REPRESENTANTE ,A.DS_MUNICIPIO ,A.DS_SIGLA_EST ,A.CD_CLIENTE ,A.NM_CLIENTE,D.MIX_PRODUTO ,SUM(A.QT_SALDO) as QT_REAL FROM IM_DEMANDA A INNER JOIN IM_PERFORMANCE_MIX D ON (D.CD_PERIODO = A.CD_PERIODO) AND (D.CD_MARCA = A.CD_MARCA) AND (D.CD_REPRESENTANTE = A.CD_REPRESENTANTE) AND (D.MIX_PRODUTO <> A.MIX_PRODUTO) WHERE A.CD_CLIENTE = '379' AND A.CD_MARCA = '3' AND A.CD_PERIODO = '8' GROUP BY A.CD_MARCA, A.DS_MARCA, A.CD_REPRESENTANTE, A.NM_REPRESENTANTE, A.DS_MUNICIPIO, A.DS_SIGLA_EST ,A.CD_CLIENTE ,A.NM_CLIENTE ,D.MIX_PRODUTO
       
    • Por Jonas Ribeiro Nascimento
      Tabela ingredientes(tem preço) e tabela Bolos(vai a qtd de ingredientes)  
      Com join pego o que preciso de cada tabela dinamicamente e multiplico o valor do ingrediente pelo sua grama.
      Mais o erro é que em cada loop ele soma a linha de baixo com a linha de cima....AFF...
       
      Obrigado a todos desde já.
      <?php                                                $soma = 0;          $resultado5=mysqli_query($conectar, "SELECT * FROM bolos_recheados_para_venda ");          $linhas5=mysqli_num_rows($resultado5);                      while($linhas5 = mysqli_fetch_array($resultado5)){                      $idx                                       = $linhas5['id'];                       $nome_do_bolox                = $linhas5['nome'];                       $modelo_do_bolox             = $linhas5['modelo_do_bolo'];                              $tamanho_do_bolox          = $linhas5['tamanho_do_bolo'];                                                                                                                                                                                                $resultado6=mysqli_query($conectar, "SELECT                                                      ingredientes.nome_ingrediente,                                                      ingredientes.preco_ingrediente * bolos_recheados_ingredientes.quantidade AS soma                                                     FROM bolos_recheados_ingredientes INNER JOIN ingredientes ON  ingredientes.nome_ingrediente = bolos_recheados_ingredientes.ingredientes WHERE                                                                         bolos_recheados_ingredientes.nome_bolo = '$nome_do_bolox'");                                                     $linhas6=mysqli_num_rows($resultado6);                                                         while($linhas6 = mysqli_fetch_array($resultado6)){                                                              $soma += $linhas6['soma'];                                                         }                                             ?>  

    • Por danipereira
      Dúvida bem básica:
      Tenho duas tabelas: produtos e reservas. Preciso listar os produtos que NÃO constam na reserva por um determinada período.
      Faço  com um innerJoin e um foreach de produtos com if($produto!=$reserva_id)   ou dois foreach sendo um com reservas e depois nos produtos != reservas naquele período?
      Não tou conseguindo fazer a listagem corretamente.
      -----PRODUTO--------------RESERVAS------------ produto_id reserva_id produto_nome produto_id produto_status data_reserva ------------------------------------------------ "SELECT imoveis.imv_id, imoveis_reservas.imv_id FROM imoveis INNER JOIN imoveis_reservas ON imoveis.imv_id =imoveis_reservas.imv_id"  
    • Por zeboladao
      Boa tarde pessoal, estou com um problema..
       
      Minha tela de listagem mostra todos os dados da tabela "PESSOA", todos não.. os importantes, CPF, NOME, TELEFONE, ATIVO etc..
       
      Existe uma tabela chamada MATRICULA q tem o idpessoa fazendo referencia.
      Nessa matricula existe um campo chamado EVADIDO pra saber se a pessoa evadiu daquele curso q se matriculou.
       
      COmo eu faço pra saber, na minha LISTAGEM, quantas vezes esssa pessoa (aluno) já evadiu de uma matricula(curso), sendo que não tem esse campo na tabela de pessoa, somente pela tabela de matriculas.
       
      Acho que ficou fácil de entender, meu sistema usa esse select atualmente:
       
      SELECT pe.* FROM pessoas pe INNER JOIN cidades ci ON (ci.idcidade=pe.idcidade)  INNER JOIN estados es ON (ci.idestado=es.idestado)  WHERE pe.removido = 'N';  
      Esse Inner JOIN Cidades e Estado é essencial também pois na minha listagem aparece o nome da cidade pois referencia por um ID (as cidades e estados são cadastrados no banco)... o mesmo pra estado.. Preciso deixar tudo isso dentro do mesmo select.
       
      Agradeço antecipadamente!
       
      -- -- Estrutura da tabela `pessoas` -- CREATE TABLE `pessoas` ( `idpessoa` int(10) UNSIGNED NOT NULL, `idcidade` int(10) UNSIGNED NOT NULL, `ativo` enum('S','N') NOT NULL DEFAULT 'S', `removido` enum('S','N') NOT NULL DEFAULT 'N', `login_ativo` enum('S','N') NOT NULL DEFAULT 'S', `data_cad` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `nome` varchar(100) NOT NULL, `estado_civil` enum('S','C','D','V') DEFAULT NULL, `etnia` enum('B','P','N','O','A') NOT NULL, `data_nasc` date NOT NULL, `naturalidade` varchar(100) DEFAULT NULL, `documento` varchar(20) NOT NULL, `rg` varchar(20) DEFAULT NULL, `rg_orgao_emissor` varchar(20) DEFAULT NULL, `rg_data_emissao` date DEFAULT NULL, `nis` varchar(11) NOT NULL, `filiacao_mae` varchar(100) DEFAULT NULL, `filiacao_pai` varchar(100) DEFAULT NULL, `cep` int(8) UNSIGNED DEFAULT NULL, `endereco` varchar(100) DEFAULT NULL, `bairro` varchar(100) DEFAULT NULL, `numero` varchar(10) DEFAULT NULL, `complemento` varchar(100) DEFAULT NULL, `login` varchar(100) DEFAULT NULL, `email` varchar(100) DEFAULT NULL, `sit_ocupacional` enum('EM','DE','AU','AP') DEFAULT NULL, `emp_profissao` varchar(30) DEFAULT NULL, `emp_empresa` varchar(30) DEFAULT NULL, `pcd_visual` enum('BAI','CEG') DEFAULT NULL, `pcd_mental` enum('MEN') DEFAULT NULL, `pcd_auditiva` enum('SBP','SBT') DEFAULT NULL, `pcd_fisica` enum('AMP','1MS','1MI','CAD','NAN','AMS','AMI','OST','PAC','PAR') DEFAULT NULL, `vinc_empregaticio` enum('CA','AU','ME','FP','OU','NT') DEFAULT NULL, `pcd` enum('S','N') NOT NULL, `pcd_qual` enum('F','A','M','V') DEFAULT NULL, `pcd_grau` enum('L','M','A') DEFAULT NULL, `nacionalidade` varchar(100) NOT NULL, `escolaridade` enum('FI','FC','MI','MC','SI','SC') NOT NULL, `formacao` varchar(30) DEFAULT NULL, `sit_escolaridade` enum('C','I','T') DEFAULT NULL, `sit_escolaridade_curso` varchar(30) DEFAULT NULL, `sit_escolaridade_periodo` enum('1','2','3','4','5','6','7','8','9','10') DEFAULT NULL, `instituicao` varchar(100) DEFAULT NULL, `curso_fundat` enum('S','N') DEFAULT NULL, `curso_fundat_qual` varchar(200) DEFAULT NULL, `nr_membros_familia` int(11) NOT NULL, `renda_familiar` enum('1','2','3','4','5','6') NOT NULL, `password` varchar(128) DEFAULT NULL, `observacoes` text, `prog_federal` enum('S','N') DEFAULT NULL, `prog_federal_qual` varchar(200) DEFAULT NULL, `encaminhado_instituicao` enum('S','N') NOT NULL, `encaminhado_instituicao_qual` varchar(200) DEFAULT NULL, `telefone1` varchar(15) DEFAULT NULL, `telefone2` varchar(15) DEFAULT NULL, `ultimo_view` datetime DEFAULT NULL, `ultima_senha` datetime NOT NULL, `avatar_nome` varchar(100) DEFAULT NULL, `avatar_servidor` varchar(100) DEFAULT NULL, `avatar_tipo` varchar(100) DEFAULT NULL, `avatar_tamanho` int(10) UNSIGNED DEFAULT NULL, `sexo` enum('M','F','N') DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Estrutura da tabela `matriculas` -- CREATE TABLE `matriculas` ( `idmatricula` int(10) UNSIGNED NOT NULL, `idhorariooferta` int(10) UNSIGNED NOT NULL, `idpessoa` int(10) UNSIGNED NOT NULL, `removido` enum('S','N') NOT NULL DEFAULT 'N', `data_cad` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `matricula` int(8) UNSIGNED ZEROFILL DEFAULT NULL, `situacao` enum('M','I') NOT NULL DEFAULT 'M', `evadido` enum('S','N') NOT NULL DEFAULT 'N', `desistente` enum('S','N') DEFAULT 'N', `reprovado` enum('S','N') DEFAULT 'N' ) ENGINE=InnoDB DEFAULT CHARSET=latin1;  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.