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

xplode_me

[MySQL] Excluir duplicados entre duas tabelas

11 mensagens neste tópico

TABLE 1
______________________________
|  ID  |  NAME   |     DATE    |
|------------------------------|
|  1   |  john   | 2007-05-25  |
|  2   |  will   | 2007-05-13  |
|  3   | Richard | 2007-05-26  |
|______|_________|_____________|



TABLE 2
______________________________
|  ID  |  NAME   |     DATE    |
|------------------------------|
|  1   |  Kate   | 2007-05-10  |
|  2   |  john   | 2007-05-25  |
|  3   | Richard | 2007-05-01  |
|______|_________|_____________|

Portanto, ha duas entradas relacionadas com o John. Elas sao iguais, apenas estao em tabelas diferentes.

Precisava duma query SQL que seleccione todos os resultados das 2 tabelas, excluindo os duplicados. Portanto se ha 2 entradas relacionadas com John (nome e data iguais), mostrar apenas um.

Alguém me pode ajudar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Primeiro justifica porque queres 2 tabelas exactamente com os mesmos dados?

Assim rapidamente parece-me um erro de análise.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ele pode estar a buscar dados de uma outra empresa com uma tabela igual e querer juntar os clientes evitando copiar clientes repetidos!

tenta assim :

SELECT * FROM TABELA1 WHERE TABELA1.Nome <> ( SELECT Nome FROM TABELA2 ) ;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não quer dizer que não possa existir uma razão.

Mas para garantir que não são inseridos campos repetidos basta que o campo seja unico.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

existem duas tabelas com dados repetidos pois sao relativas a proponentes e fiadores em propostas de simulacao de créditos.

É normal que uma pessoa seja proponente num crédito, e fiadora noutro, daís os dados repetidos.

Gurzi, o problema é que assim so é considerada a tabela1 como fonte de dados, sendo essa comparada com a tabela 2.

Só que eu preciso que ele devolva os dados das duas tabelas.

Ex, existe a pessoa "Miguel" na tabela2. Existem "João", "margarida" "Miguel" na tabela1. Assim só me vai aparecer "joão" "Margarida", e o Miguel nao aparece, puff :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se os dados são exactamente iguais, podes fazer isso com um simples join entre queries, caso contrário estás perante um caso complexo de detecção de duplicados (um problema de limpeza de dados) e necessitas de ter um operador de "approximate join" para detectar os registos iguais ou semelhantes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

 (
SELECT *
FROM proponentes
WHERE proponentes.nome <> (
SELECT nome
FROM fiadores )
AND datanascimento LIKE '____-$mes-%'
)
UNION (

SELECT *
FROM fiadores
WHERE datanascimento LIKE '____-$mes-%'
)
LIMIT 0 , 30 

Mandou-me dar uma volta :P - #1242 - Subquery returns more than 1 row

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens de usar o operador NOT IN e não <>.

 (
SELECT *
FROM proponentes
WHERE proponentes.nome    NOT IN    (
SELECT nome
FROM fiadores )
AND datanascimento LIKE '____-$mes-%'
)
UNION (

SELECT *
FROM fiadores
WHERE datanascimento LIKE '____-$mes-%'
)
LIMIT 0 , 30 

Mandou-me dar uma volta :thumbsup: - #1242 - Subquery returns more than 1 row

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites


(SELECT *
FROM proponentes
WHERE datanascimento LIKE '____-$mes-%'
)
LIMIT 0 , 30)
UNION
(SELECT *
FROM fiadores
WHERE datanascimento LIKE '____-$mes-%'
)
LIMIT 0 , 30)

a UNION não é suposto eliminar os duplicados?

Fico com um problema que  é, não posso fazer SELECT *, tenho de excluir o ID dos campos, pois o ID varia sempre, mesmo que o resto dos campos sejam iguais (entre os tais 2 registos nas 2 tab).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual a utilidade do where nessas querys?

Nesse caso como o ID é diferente, não existem linhas repetidas para o union descartar.

Tiras o * e metes os campos que queres.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites


(SELECT *
FROM proponentes
WHERE datanascimento LIKE '____-$mes-%'
)
LIMIT 0 , 30)
UNION
(SELECT *
FROM fiadores
WHERE datanascimento LIKE '____-$mes-%'
)
LIMIT 0 , 30)

a UNION não é suposto eliminar os duplicados?

Fico com um problema que  é, não posso fazer SELECT *, tenho de excluir o ID dos campos, pois o ID varia sempre, mesmo que o resto dos campos sejam iguais (entre os tais 2 registos nas 2 tab).

Não.

O union faz a união entre o resultado das duas queries.

O distinct é que elimina registos duplicados de um result set.

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