Ir para conteúdo

Arquivado

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

Emerson Luiz

Select complexo...

Recommended Posts

Amigos,

 

Preciso de um help aqui...

 

Tenho o seguinte SELECT funcionando:

 

SELECT

@prefixo:= (SELECT SUBSTRING(dst,1,6) FROM cdr_cdr LIMIT 1) AS prefixo,
@ddd:= (SELECT SUBSTRING(prefixo,1,2) FROM nao_portados WHERE prefixo = @prefixo) AS ddd,
@cidade:= (SELECT concat(NomedaLocalidade) FROM Anatel where concat(Codigo_Nacional,'',Prefixo) = @prefixo LIMIT 1) As cidade,
@estado:= (SELECT state.letter FROM state INNER JOIN city ON (city.id_state = state.id) AND (city.iso_ddd = @ddd) WHERE cidade = @cidade) AS estado;
RETORNO:
+---------+------+-----------+--------+
| prefixo | ddd | cidade | estado |
+---------+------+-----------+--------+
| 112010 | 11 | SAO PAULO | SP |
+---------+------+-----------+--------+
1 row in set (0,10 sec)
Até ai OK, esta fazendo o que eu preciso....
O meu problema que tenho 20.000 registros, e preciso que o SELECT acima rode para cada registro....
Como posso fazer isso?
Obrigado mais uma vez pela ajuda....

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

prefixo parece relacionar cdr_cdr ,nao_portados e Anatel

 

cidade parece relacionar Anatel e state

 

Faça um join com Group By e Count

 

Exemplos vários até neste fórum.

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos,

 

Eu resolvi assim, seguindo as orientações do MOTTA:

 

INSERT INTO cdrport (dst,src,calldate,disposition,duration,billsec,prefixo,ddd,cidade,estado,operadora,tipo)
SELECT
dst, src, calldate, disposition, duration, billsec,
@prefixo:= (SELECT SUBSTRING(dst,1,6)) AS prefixo,
@ddd:= (SELECT ddd FROM prefixo WHERE prefixo = @prefixo) AS ddd,
@cidade:= (SELECT cidade FROM prefixo WHERE prefixo = @prefixo) As cidade,
@estado:= (SELECT estado FROM prefixo WHERE prefixo = @prefixo) As estado,
@tipo:= (SELECT operadora FROM prefixo WHERE prefixo = @prefixo) As operadora,
@tipo:= (SELECT tipo FROM prefixo WHERE prefixo = @prefixo) As tipo
FROM cdr_cdr
ORDER BY dst;
Só preciso agora complicar um pouco, tomando o codigo acima como base, como eu crio uma funçao onde cada registro novo inserido em uma tabela X, ele executa o codigo acima baseado no novo dado inserido na tabela X.
Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não foi bem isto que pensei pensei num join das tabelas envolvidas.

 

Estou sem tempo agora senão tentava montar o select.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

Achei um problema no codigo acima... na tebela tem 20.000 registros, ela só funciona ate uns 1.000 no maximo...

Sem contar que esta demorando muito para executar...

 

Ele executa bem ate uns 1.000 registros e depois da o erro: 'Subquery returns more than 1 row'

 

pode me ajudar ?

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.