Ir para conteúdo

POWERED BY:

Rogério Orlando

join em várias tabelas

Recommended Posts

Na SQL abaixo, quando consulto as tabelas, os registros se repetem, apresentando mais do que realmente existem.

Alguém pode auxiliar no que está errado ou o que falta para que a select retorne apenas um registro para cada documento?

Esclareço que todas as tabelas tem um campo "documento", porém ele não é chave e no retorno trouxe todos os campos de todas as tabelas e não apenas as dá SQL:

 

 

select so01.documento,so01.digito,so01.nome,so01.regional,so01.situacao,so01.observacao,so01.n_spprev,so01.averbacao,
so02.endereco, so02.numero, so02.bairro,so02.cidade,so02.cep,so02.estado,so02.aniversario,
so03.rg, so03.cpf, so03.email, 
so04.estado_civil, so04.agencia,so04.dg_agencia,so04.conta,so04.dg_conta,so04.banco,so04.ddd,so04.telefone,so04.nascimento,
so04.admissao,so04.demissao_seg,so04.admor,so04.ddd_cel,so04.celular

from so03 
inner join so01 ON so01.documento= so03.documento
inner join so02 ON so02.documento= so03.documento
inner join so04 ON so04.documento=so03.documento 
where so01.documento="68" and so01.digito="0"

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Citar

porém ele não é chave 

 

Qual é a chave das tabelas ?

Os nomes das tabelas não ajudam mas pelas colunas temos dados que podem gerar a "duplicidade" pois 

uma pessoas pode ter mais de uma conta e ou celular.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelo apoio Motta.

Não tenho muito conhecimento. o banco de dados peguei do serviço para tentar desenvolver, ou seja, não o criei.

Segue uma foto com as tabelas. Nenhuma delas tem informações repetidas como comentou do celular, mas o vínculo existente entre elas é o documento e o dígito, que formam um documento tipo CPF, que não pode ser repetido na mesma tabela.

Fico no aguardo e já agradeço a tentativa.

so.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

As PKs da tabela é o campo ID.

Que devem ser diferentes pelas tabelas.

Não é exibido se existe uma UNIQUE KEY para documento.

Faça um teste , para um caso "duplidado"

faça um "select * from" para cada uma das tabelas

no documento e veja o resultado.

Eu ainda aposto que a duplicidade é normal e reflete o contéudo.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Motta!

fiz as selects individualmente em cada tabela, e todas retornaram apenas um registro para cada uma.

Todas as tabelas são vinculadas a um campo documento e outro campo dígito (where so01.documento="68" and so01.digito="0"), onde repeti, como solicitado, a consulta nas tabelas so01, so02, so03 e so04, todas com o "where" acima.

Como disse, esse documento, é um tipo de CPF, não tem repetição.

 

Motta!

Poderia me explicar como funciona no meu código, o FROM so03, pois tentei trocar a tabela por uma das outras três e ele dá erro (not unique table/alias 'so...)!!!

 

select so01.documento,...
so02.endereco, ...
so03.rg, ...
so04....

from so03
inner join so01 ON so01.documento= so03.documento
inner join so02 ON so02.documento= so03.documento
inner join so04 ON so04.documento=so03.documento 
where so01.documento="68" and so01.digito="0"
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta!

Creio que resolvi. 

Constei um Group By so01.documento e trouxe apenas o que precisava.

 

Agora tenho que entender o From so03, que não consigo constar outra tabela que dá erro, conforme constei acima.

 Se puder me auxiiar fico grato.

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você só pode citar a tabela uma vez para citar mais de uma precisa trocar o "alias"

Por exemplo
 

select ccdeb.descri ccustodeb , cccred.descri ccustocred , c.data , c.valor
from custos c
inner join centro_custo ccdeb  ON ccdeb.cod= c.ccusto_de
inner join centro_custo cccred ON cccred.cod= c.ccusto_cred

exibir 2 Centro de custo ligados a mesma tabela

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 cesarhtc
      Boa noite, estou precisando copiar tabelas oracle, como são muitas tabelas só quero copiar somente aquelas que foram alteradas em seus registros ou estrutura no dia (diariamente).
       
      desde já agradeço.
    • Por FabianoSouza
      Tenho a tabela VAGAS e a tab INSCRITOS.
       
      Preciso fazer um SELECT para retornar as Vagas e a quantidade de candidatos inscritos para cada VAGA.
       
      Fazendo isso retorna duplicidade de Vagas... :-(
       
      select V.empresa, COunt(CIV.cdVaga) AS insc from dbo.vagas AS V LEFT JOIN dbo.inscVaga AS CIV ON V.codigo = CIV.cdVaga GROUP BY V.codigo, V.empresa Como monto essa consulta??
    • Por Omar~
      Estou com a tarefa de elaborar uma leitura no banco de dados e não estou conseguindo achar uma solução para a instrução de leitura.
      Basicamente tenho uma tabela que de produtos, nela tenho uma coluna para registrar o vendedor e outra para registrar o comprador assim associar esses valores com a tabela de usuários.
      Digamos assim:
      SELECT produto.id, produto.vendedor, produto.comprador, usuarios.id, usuarios.nome FROM produto INNER JOIN usuarios ON produto.vendedor = usuarios.id Com isso tenho a informação do vendedor na tabela de usuários, mas como faria para obter os dados do comprador também?
       
      Uma forma seria executar dois joins na tabela de usuários porém acho que assim me parece mais gabiarra do que o jeito mais coeso de se fazer  (e na verdade foi gabiarra sim porque não sei como proceder)
      Tipo assim:
      SELECT produto.id, produto.vendedor, produto.comprador, a.id AS a_id, a.nome AS a_nome, b.id AS b_id, b.nome AS b_nome FROM produto INNER JOIN usuarios AS a ON produto.vendedor = a.id INNER JOIN usuarios AS b ON produto.comprador = b.id Tem outro jeito? Como?
    • Por Omar~
      Blz...?
      Vejamos essa query:
      SELECT postagem.id, postagem.link, postagem.autor, postagem.editor, usuario.id, usuario.nome FROM postagem INNER JOIN usuario ON postagem.autor = usuario.id Então estou buscando pelos dados da postagem e o autor da mesma.
      A questão é:
      Tenho uma tabela "postagem" que guarda informação do "autor" da postagem e quem a editou "editor"
      Com essa query consigo trazer o resultado da tabela usuario dano a referencia do autor.
      Mas como eu faria para ter os dados do "autor" e do "editor" na tabela "usuario"?
      Preciso obter os nomes de quem criou e quem editou.
    • Por r.guerra
      Salve galera, boa tarde a todos.
      estou tendo um problema que ainda nao consegui enxergar... faço uma consulta mysql que funciona normalmente no proprio ambiente(mysql) mas ao solicitar a exibição do campo via php gera nao exibe e me tras um alerta.
       
      ****codigo php
      function monta_avaliacao($cpf){
          $query = mysqli_query($_SESSION["conector"],"SELECT c.*, a. cliente AS clientes FROM clientes AS c INNER JOIN avaliacoes AS a ON c.id = a.cliente WHERE c.cpf='$cpf'");
           $dados = mysqli_fetch_assoc($query);
          print $dados['c.cpf'];
           }
       
      *****sainda no html
      Notice: Undefined index: c.cpf in C:\xampp\htdocs\acus\inclusoes\funcoes.php on line 29
      Notice: Undefined index: a.pe in C:\xampp\htdocs\acus\inclusoes\funcoes.php on line 30
       
      tenho um arquivo com as funções, e apenas mando os parametros.
×

Informação importante

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