Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
FebenSss

Soma entre colunas de duas tabelas diferentes

Recommended Posts

FebenSss    13

Bom dia galera, alguém poderia me ajudar?

 

Tenho duas tabelas no banco de dados de pontuação
  Tabela pontos_usuario

id_usuario  acertos

      1             20    

Tabela pontos_usuario2

id_usuario  acertos

         1          20

 
E a tabela de cadastro de usuário
 
Tabela cadastro
id      nome_usuario
 1     TESTE
 
Eu queria fazer um select para somar os dois acertos e aparecer na tela desta forma:
Nome       Pontuação
TESTE           40
 
tentei com esse select
SELECT cadastro.nome_usuario, (pontos_usuario.acertos+pontos_usuario2.acertos) as acertos FROM `pontos_usuario`
inner join cadastro inner join pontos_usuario2 on cadastro.id=pontos_usuario.id_usuario order by acertos DESC
 
Ele está mostrando certinho, porém se o id_usuario não se encontrar nas duas tabelas, ele não mostra nada, como faço para mostrar se ele estiver em alguma das duas tabelas e em ambas?
Editado por FebenSss

Compartilhar este post


Link para o post
Compartilhar em outros sites
Matteusin    0

Bom dia. Tenta isso:

SELECT TC.NOME_USUARIO NOME,       NVL(PU.ACERTOS + PU2.ACERTOS, 0) PONTUACAO  FROM TABELA_CADASTRO TC INNER JOIN PONTOS_USUARIO PU    ON PU.ID_USUARIO = TC.ID_USUARIO INNER JOIN PONTOS_USUARIO2 PU2    ON PU2.ID_USUARIO = TC.ID_USUARIO
Editado por Matteusin

Compartilhar este post


Link para o post
Compartilhar em outros sites
FebenSss    13
  • Autor do tópico
  • Primeiramente obrigado pela ajuda,

    Eu adaptei o código com o que estou mais acostumado e ficou assim

    SELECT cadastro.nome_usuario,       NVL(pontos_usuario.acertos + pontos_usuario2.acertos, 0) PONTUACAO  FROM cadastro TC INNER JOIN pontos_usuario    ON pontos_usuario.id_usuario = cadastro.id INNER JOIN pontos_usuario2    ON pontos_usuario2.id_usuario = cadastro.id

    O sql retornou essa mensagem 

    #1054 - Unknown column 'cadastro.nome_usuario' in 'field list' 

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Matteusin    0

    Esse erro é porque você esqueceu de remover o apelido da tabela "cadastro"... está assim ainda: FROM cadastro TC

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    FebenSss    13
  • Autor do tópico
  • Eu tinha esquecido de tirar o TC do cadastro na terceira linha, ficou assim

    SELECT cadastro.nome_usuario,       NVL(pontos_usuario.acertos + pontos_usuario2.acertos, 0) PONTUACAO  FROM cadastro INNER JOIN pontos_usuario    ON pontos_usuario.id_usuario = cadastro.id INNER JOIN pontos_usuario2    ON pontos_usuario2.id_usuario = cadastro.id

    Só que parece que ele não aceitou essa função NVL

    #1305 - FUNCTION tecno_provas.NVL does not exist 

     

    Estou utilizanzo SGBD MySQL

    Editado por FebenSss

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Matteusin    0

    Ops, eu esqueci de perguntar com qual banco você estava trabalhando kkkk

    Troque para:

    IfNull(pontos_usuario.acertos + pontos_usuario2.acertos, 0) PONTUACAO

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    FebenSss    13
  • Autor do tópico
  • Rodou, porém da mesma forma que eu tinha falado, 

     

    Só mostra alguma coisa se o id_usuario constar em ambas as tabelas

     

    Se o id_usuario estiver só em uma tabela, não mostra nada.

    Editado por FebenSss

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Matteusin    0

    Entendi! Então troca os dois  "INNER JOIN" por "LEFT JOIN" que vai resolver. Posta aqui se deu certo!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    FebenSss    13
  • Autor do tópico
  • Agora mostrou o resultado, porém a pontuação ficou em 0.

     

    quando eu troco o IfNull pelo SUM a pontuação fica em NULL, como no modo abaixo

    SELECT cadastro.nome_usuario,       SUM(pontos_usuario.acertos + pontos_usuario2.acertos) PONTUACAO  FROM cadastro LEFT JOIN pontos_usuario    ON pontos_usuario.id_usuario = cadastro.id LEFT JOIN pontos_usuario2    ON pontos_usuario2.id_usuario = cadastro.id
    Editado por FebenSss

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Matteusin    0

    O comando SUM é pra somar as linhas de uma consulta... o que você quer é somar duas colunas... do jeito q estava está correto!

    Uma pergunta, nas tabelas pontos_usuario e pontos_usuario2 possuem registros com o ID da tabela cadastro? Se está vindo zerado, significa que não tem hein!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    FebenSss    13
  • Autor do tópico
  • Quando o usuário pontua, é armazenado o id dele na tabela de pontos_usuario

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Matteusin    0

    Da forma que passei está correta. A unica explicação pra estar vindo zerado pra você é: Atualmente nessas tabelas não possuem o ID puxado da tabela CADASTRO ou então você está vendo somente uma parte do resultado. Ordena a consulta com ORDER BY DESC no campo de pontuação

     

    Fora isso, não faz sentido!

    Editado por Matteusin

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    FebenSss    13
  • Autor do tópico
  • Melhor eu replanejar meu BD rsrsrs

     

    Obrigado cara me ajudou muito, também consegui aprender uns macetes novos

     

    Valeu mesmo!

    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






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×