Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Pesquisa SQL muito demorada e com resultado repetido!


Rusleypb

Pergunta

Ola amigos, estou tendo muita dificuldade em retornar um resultado correto em uma pesquisa SQL.

Tenho um banco de dados ACCESS com 5 tabelas.

Tabelas: dados, e2000, e2004, e2008 e e2012. Estas tabelas contém estatísticas e resultados de eleições de candidatos aqui da minha cidade.

A tabela dados registra os dados pessoais dos candidatos (nome, data de nascimento, estado civil, grau de instrução e ocupação), enquanto que as demais tabelas e2000, e2004, e2008 e e2012 contém os resultados nas respectivas eleições (2000, 2004, 2008 e 2012).

Criei uma chave estrangeira nas tabelas e2000, e2004, e2008 e e2012 vinculando-as à tabela dados.

Preciso de uma pesquisa total, contendo todos os registros da tabela dados e também os registros das demais tabelas.

Tentei esta consulta: SELECT * FROM dados, e2000, e2004, e2008, e2012 WHERE dados.id = e2000.cod_nome or dados.id = e2004.cod_nome or dados.id = e2008.cod_nome or dados.id = e2012.cod_nome

O resultado desta consulta é demorado e com vários registros duplicado.

Agradeço se alguém me ajudar neste problema.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Opa! Um mês depois, já acabaram as eleições ahauhauaha, mas quem sabe seja útil para a próxima.

Primeiro, não há necessidade de criar as tabelas e2000, e2004, e2008 e e2012, basta criad uma tabela, eleicao por exemplo, e nela um campo com o ano. Na tabela de dados você cria um campo PK (Chave primária) com um código identificando o candidato. Depois na tabela eleicao você vai inserindo registros referente aos resultados das eleições, lembrando de usar uma FK (Chave estrangeira) vinculando o candidato ao dado da eleição. Depois, na consulta você faz assim:

Se quiser que venha algo como

NOME, PARTIDO, NUMERO, ANO, VOTOS

JOSÉ DA SILVA, PTESTE, 99999, 2000, 150

JOSÉ DA SILVA, PTESTE, 99999, 2004, 168

ETC...

Use uma consulta assim:

SELECT D.nome, E.partido, E.numero, E.ano, E.votos FROM dados AS D LEFT JOIN eleicao AS E ON(D.cod = E.cod);

Se quiser que venha algo como:

NOME, PARTIDO, NUMERO, 2000, 2004, 2008, 2012

JOSÉ DA SILVA, PTESTE, 99999, 150, 168, 201, 259

JOÃO DA SILVA, PTESTE2, 98111, 102, 130, 98, 302

ETC...

Use uma consulta assim:

SELECT D.nome, E.partido, E.numero, SUM(IIF(E.ano = 2000, E.votos, 0)) AS 2000, SUM(IIF(E.ano = 2004, E.votos, 0)) AS 2004, SUM(IIF(E.ano = 2008, E.votos, 0)) AS 2008, SUM(IIF(E.ano = 2012, E.votos, 0)) AS 2012 FROM dados AS D LEFT JOIN eleicao AS E ON(D.cod = E.cod) GROUP BY D.nome, E.partido, e.numero;

Editado por Iceguy
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...