Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

KUROL3

duplicidade de registros

Recommended Posts

Olá estou com um problema.. e gostaria de uma solução inteligente...

 

tenho uma tabela de bairros

 

id ----- nome

 

597----Jardim Irajá

598----Jardim Irajá

823----Jardim Irajá

961----Jardim Irajá

 

tabela de imóveis

 

id ----- id_bairro

 

25 ----- 597

26 ----- 598

27 ----- 598

28 ----- 823

29 ----- 823

30 ----- 823

31 ----- 823

32 ----- 961

33 ----- 961

34 ----- 961

 

Tem como fazer um comando que verifique os bairros que tem imoveis com duplicidade na tabela de bairros e jogue tudo para um único id de bairro na tabela de imoveis de preferencia para um bairro que tiver maior número de imoveis) e depois apague os bairros na tabela de bairros que contiver mais de um registro duplicado.

 

srrssr boa essa em.. srrsrs

Marco

Compartilhar este post


Link para o post
Compartilhar em outros sites


update imoveis i,

(select max(id) id_unico , group_concat(id) array_id from bairros group by nome) b

set

i.id_bairro = b.id_unico

where i.id_bairro in b.array_id

Compartilhar este post


Link para o post
Compartilhar em outros sites

update imoveis i,
(select max(id) id_unico , group_concat(id) array_id from bairros group by nome) b
set
i.id_bairro = b.id_unico
where i.id_bairro in b.array_id

 

veja o erro

 

UPDATE imoveis i,

(

SELECT max( id ) id_unico, group_concat( id ) array_id

FROM bairros

GROUP BY nome

)b

SET i.id_bairro = b.id_unico WHERE i.id_bairro IN b.array_id

 

Mensagens do MySQL : [Documentação]

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'b.array_id' at line 1

 

tentei assim tb

UPDATE imoveis i,

(

SELECT max( id ) AS id_unico, group_concat( id ) AS array_id

FROM bairros

GROUP BY nome

)b

SET i.id_bairro = b.id_unico WHERE i.id_bairro IN b.array_id

 

Mensagens do MySQL : [Documentação]

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'b.array_id' at line 7

Compartilhar este post


Link para o post
Compartilhar em outros sites

update imoveis i,

(select max(id) id_unico , group_concat(id) array_id from bairros group by nome) b

set

i.id_bairro = b.id_unico

where i.id_bairro in (b.array_id)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa que estranho por algum motivo não ficou do jeito que queria....

 

continua tendo mais de um bairro com imóveis... ZZZZZ

 

será que no b.array_id consta todos os ids do grupo by nome?

tem algum comando que exibe somente o array_id (os valores) "para tirar a prova"

 

tipo issu:

select max(id) id_unico , group_concat(id) array_id from bairros group by nome

so que ao invés de motrar [bLOB - 3 Bytes] ou [bLOB - 5 Bytes]

mostrar os ids?

 

Marco

Compartilhar este post


Link para o post
Compartilhar em outros sites

Geista verifique e os nomes estavam exatamente = estranho nao ter funcionado.....

 

mas valeu como lição... pois vou usar em outros casos....

 

acabei fazendo assim criando o campo bairro_antigo na tabela de imoveis:

 

update

imoveis

inner join bairros on bairros.id = imoveis.id_bairro

set bairro_antigo = bairros.nome where imoveis.id_bairro = bairros.id

 

UPDATE

imoveis

inner join bairros on (bairros.nome = imoveis.bairro_antigo and bairros.cidade = imoveis.cidade)

set imoveis.id_bairro = (select id from bairros where bairros.nome = imoveis.bairro_antigo and imoveis.cidade=bairros.cidade limit 1)

where bairros.nome = imoveis.bairro_antigo and bairros.cidade = imoveis.cidade

 

Abraço

Marco

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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