• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Popovich

Duvida Access e SQL

3 mensagens neste tópico

Oi.

Eu instalei vários patches no meu fifa 07  e com todas actualizações feitas a db acabou por ficar com alguns jogadores que estão em duas equipas o que faz um jogo crashar.

Estou a tentar resolver o problema com o access e sql mas não estou a conseguir.

A tabela em questão e table_teamplayerlinks que têm o teamid,playerid e mais algumas informaões.

O que acontece é que tem alguns playerid com o mesmo teamid.

Os jogadores podem estar nas selecções nacionais e nesse caso já pode aparecer duas vezes. Para isso a equipa tem que estar na table_international_id.

O que eu queria era eliminar os registos repetidos de maneira a que cada jogador só estivesse numa equipa e se possível continuarem nas selecções. Tenho registos em que um jogador tem 3 equipas :rant_01:

Espero que tenho sido claro.

Em resumo:

table_teamplayerlinks: playerid,teamid (O playerid só pode ter uma teamid)

- Se o player for internacional pode ter mais um registo e terá que verificar se a equipa é uma selecção (teamid IN table_international_ids).

Se não der a parte dos jogadores internacionais tudo bem.

O mais importante é eliminar os repetidos.

Espero que me possam ajudar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva. Eu aconselhava fazeres uma copia do teu ficheiro .mdb antes de executares a query seguinte, uma vez que isso nao suporta rollback e podes perder os dados indefinitivamente.

o teu problema eh facil de resolver, tens de procurar os jogadores com mais do que um teamid nao incluindo na query as teamsids que pertencam a seleccoes nacionais, ou seja

SELECT playerid, teamid, count(*)

FROM table_teamplayerlinks

WHERE teamid NOT IN (SELECT teamid FROM table_international_ids)

GROUP BY playerid, teamid

HAVING count(*)>1;

esta query deve chegar para ver os jogadores repetidos.

para apagar

DELETE FROM table_teamplayerlinks original

WHERE EXISTS

(

SELECT *

FROM table_teamplayerlinks temporario

WHERE teamid NOT IN (SELECT teamid FROM table_international_ids)

GROUP BY playerid

HAVING count(*)>1

AND original.player=temporario.playerid

);

nao estou 100% seguro sobre isto porque ja nao pego em access ha anos. e digo isto apenas por nao saber se o access aceita esta query. seja como for, se nao resultar, voltamos a pensar um pouco nisto.

abraco

-edit- faltava condicao na query para apagar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se quiseres podes aplicar o processo apenas a jogadores repetidos

SELECT playerid, count(*)

FROM table_teamplayerlinks

WHERE teamid NOT IN table_international_ids

GROUP BY playerid

HAVING count(*)>1;

basta eliminar o teamid da clausula GROUP BY

isto eh mais abrangente, mas eh dificil de definir qual eh a equipa que vais apagar no caso do jogador estar em duas equipas diferentes (ie: porto e boavista). o motor da base de dados vais apagar o primeiro que encontrar a menos que facas um ORDER BY

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora