Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
Roberto_Karen Novato
Registrado: Sexta-Feira, 14 de Setembro de 2007 Mensagens: 61
|
Enviada: Ter Fev 02, 2016 11:46 pm Assunto: pegar dados de outra tabela via sql |
|
|
Ola pessoal tenho duas tabelas distintas com chave igual
na tabela A quero buscar a informação de um determinado campo da tabela B quando o campo chave for igual e dar um update na tabela A
USO O COMANDO ABAIXO mas é muito demorado haja visto que minha tabela destino tem 250 mil registro
Dm.IB_PROVISAO.SQL.Clear;
DM.IB_PROVISAO.SQL.Add('UPDATE BASE_UNICA_1 SET LETRA_AD =(SELECT distinct AD.AD_LETRA FROM AD WHERE AD.CONTA = BASE_UNICA_1.CONTA) WHERE EXISTS ( SELECT BASE_UNICA_1.CONTA FROM AD WHERE AD.CONTA = BASE_UNICA_1.CONTA)');
DM.IB_PROVISAO.ExecSQL;
algum comando diferente que faça o processo ?
grato |
|
Voltar ao Topo |
|
|
joemil Moderador
Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9098 Localização: Sinop-MT
|
Enviada: Qua Fev 03, 2016 7:42 am Assunto: |
|
|
qual BD vc ta usando?
se for FB:
Código: | UPDATE base_unica_1
SET letra_AD = (SELECT FIRST ad.ad_letra
FROM ad
WHERE ad.conta = base_unica_1.conta) |
se for MySQL:
Código: | UPDATE base_unica_1
SET letra_AD = (SELECT ad.ad_letra
FROM ad
WHERE ad.conta = base_unica_1.conta LIMIT 1) |
o campo ad.conta deve possuir indice pra melhorar a velocidade _________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
Voltar ao Topo |
|
|
Roberto_Karen Novato
Registrado: Sexta-Feira, 14 de Setembro de 2007 Mensagens: 61
|
Enviada: Qua Fev 03, 2016 10:31 am Assunto: |
|
|
joemil escreveu: | qual BD vc ta usando?
se for FB:
Código: | UPDATE base_unica_1
SET letra_AD = (SELECT FIRST ad.ad_letra
FROM ad
WHERE ad.conta = base_unica_1.conta) |
se for MySQL:
Código: | UPDATE base_unica_1
SET letra_AD = (SELECT ad.ad_letra
FROM ad
WHERE ad.conta = base_unica_1.conta LIMIT 1) |
o campo ad.conta deve possuir indice pra melhorar a velocidade |
Uso o fB
so tem um problema a tabela a ser atualizada tem mais de um registro igual a TABELA AD |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Fev 03, 2016 10:58 am Assunto: |
|
|
Boa tarde,
Qual valor (de qual registro) deve ser utilizado no Update quando existir mais de um registro na tabela AD para a mesma conta?
Editado pela última vez por imex em Qui Set 28, 2023 11:58 am, num total de 1 vez |
|
Voltar ao Topo |
|
|
Roberto_Karen Novato
Registrado: Sexta-Feira, 14 de Setembro de 2007 Mensagens: 61
|
Enviada: Qua Fev 03, 2016 11:28 am Assunto: |
|
|
imex escreveu: | Boa tarde,
Qual valor (de qual registro) deve ser utilizado no Update quando existir mais de um registro na tabela AD para a mesma conta? |
Acho que não me fiz entender
na tabela BASE_UNICA TENHO
CONTA LETRA
REG 1 07038-6
REG 2 07038-6
NA TABELA AD TENHO
CONTA LETRA
REG 1 07038-6 B
QUERO QUE A LETRA REF A CONTA DA TAB AD SEJA ATUALIZADA EM TODAS AS LINHAS DA TABELA BASE_UNICA QUANDO AS CONTAS FOREM IGUAIS
FICANDO ASSIM
CONTA LETRA
REG 1 07038-6 B
REG 2 07038-6 B
pelo metodo acima ate consigo mas demora muito devido ao grande numero de registro tanta da tabela BASE_UNICA (250000 reg) como da tabela AD (120000 reg) |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Fev 03, 2016 1:18 pm Assunto: |
|
|
Experimente fazer testes com o comando Merge para ver se é obtido um desempenho melhor:
Código: | merge into BASE_UNICA_1
using AD
on AD.CONTA = BASE_UNICA_1.CONTA
when matched then
UPDATE SET LETRA_AD = AD.AD_LETRA |
Espero que ajude |
|
Voltar ao Topo |
|
|
Roberto_Karen Novato
Registrado: Sexta-Feira, 14 de Setembro de 2007 Mensagens: 61
|
Enviada: Qua Fev 03, 2016 2:09 pm Assunto: |
|
|
imex escreveu: | Experimente fazer testes com o comando Merge para ver se é obtido um desempenho melhor:
Código: | merge into BASE_UNICA_1
using AD
on AD.CONTA = BASE_UNICA_1.CONTA
when matched then
UPDATE SET LETRA_AD = AD.AD_LETRA |
Espero que ajude |
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, char 1.
merge. |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Fev 03, 2016 2:35 pm Assunto: |
|
|
Qual versão do Firebird você está utilizando?
O comando Merge foi adicionado a partir da versão 2.1.
Existe algum índice na tabela AD com o campo Conta? |
|
Voltar ao Topo |
|
|
Roberto_Karen Novato
Registrado: Sexta-Feira, 14 de Setembro de 2007 Mensagens: 61
|
Enviada: Qua Fev 03, 2016 2:48 pm Assunto: |
|
|
imex escreveu: | Qual versão do Firebird você está utilizando?
O comando Merge foi adicionado a partir da versão 2.1.
Existe algum índice na tabela AD com o campo Conta? |
ENTENDI ESTOU USANDO O 1.5 quanto ao indece não tem
também não sei como criar em modo execução
vou instalar a versao 2.1 para ver se resolve
Meu Amigo instalei o firebird 2.5 e ficou show, deu certinho você ao sabe como me ajudou atualiza a base de 250000 em 20 10 segundo
muito obrigado pela ajuda,
sucesso ! |
|
Voltar ao Topo |
|
|
Roberto_Karen Novato
Registrado: Sexta-Feira, 14 de Setembro de 2007 Mensagens: 61
|
Enviada: Qui Fev 04, 2016 7:08 pm Assunto: |
|
|
Roberto_Karen escreveu: | imex escreveu: | Qual versão do Firebird você está utilizando?
O comando Merge foi adicionado a partir da versão 2.1.
Existe algum índice na tabela AD com o campo Conta? |
ENTENDI ESTOU USANDO O 1.5 quanto ao indece não tem
também não sei como criar em modo execução
vou instalar a versao 2.1 para ver se resolve
Meu Amigo instalei o firebird 2.5 e ficou show, deu certinho você ao sabe como me ajudou atualiza a base de 250000 em 20 10 segundo
muito obrigado pela ajuda,
sucesso ! |
Amigo desculpe o incomodo
estava tudo certo de repente começo aparecer este erro ,
invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 0.
merge.
ja procurei na internet e nao consegui identificar o erro
Dm.QueryMaster.SQL.Clear;
DM.QueryMaster.SQL.Add('merge into BASE_UN_2 using TB_ADTO on TB_ADTO.CONTA = BASE_UN_2.CONTA when matched then UPDATE SET LETRA_AD = TB_ADTO.AD_LETRA ');
DM.QueryMaster.ExecSQL; |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Fev 05, 2016 8:52 am Assunto: |
|
|
Pela mensagem de erro, acredito que o comando Merge não está sendo reconhecido.
Acho que isso pode estar ocorrendo se você estiver utilizando uma versão antiga da dll cliente do Firebird (fbclient.dll ou gds32.dll, depende do componente de conexão utilizado), sendo que acho que essa dll deve de preferência ficar na mesma pasta que o seu executável.
Espero que ajude |
|
Voltar ao Topo |
|
|
Roberto_Karen Novato
Registrado: Sexta-Feira, 14 de Setembro de 2007 Mensagens: 61
|
Enviada: Sex Fev 24, 2017 1:52 pm Assunto: |
|
|
imex escreveu: | Pela mensagem de erro, acredito que o comando Merge não está sendo reconhecido.
Acho que isso pode estar ocorrendo se você estiver utilizando uma versão antiga da dll cliente do Firebird (fbclient.dll ou gds32.dll, depende do componente de conexão utilizado), sendo que acho que essa dll deve de preferência ficar na mesma pasta que o seu executável.
Espero que ajude |
Olá tive que voltar aqui para tirar uma dúvida,
o comando merge com banco firebird 2.5 alocado no servidor server 2012 processa muito rápido, mas quando o banco esta alocado em um servidor Linux fica muito lento tem alguma coisa haver se sim tem como resolver ?
Grato! |
|
Voltar ao Topo |
|
|
|