queria ajuda nessa pesquisa SQL

12/12/2005

0

Nao sei se o topico deveria estar aqui, mas creio q muitos poderao me ajudar. Estou usando o Delphi e o Rave para criar relatorios com aspecto visual melhor, uma vez q o sistema é DOS e em Clipper, o problema é q usa arquivos DBF como banco de dados, e tenho uma consulta que esta demorando muito tempo pois um dos arquivos tem 55 Mbs!!! Quando mando fazer a consulta do jeito q esta construida demora minutos no SQL explorer, nem tentei ai ver como o TQuery vai se comportar. Abaixo segue a consulta.. qq ideia vai ser util. Pensei em fazer uma UNION, mas nao to sabendo como, tb vo colocar como eu pensei q seria...

Abraço a todos e espero q tenham como me ajudar!!

[size=9:103b108635]SELECT fa.nro_cheque, b.nome_bco, ccp.dt_cheque, ccp.valor AS VALORCHEQUE,
fa.nro_fat AS INV, f.nome_for, fa.dt_fat, fa.val_total AS VALORFATURA,
s.nro_file, s.dt_ini, s.dt_fim, cs.descr_ser AS SERV1, ss.descr_ser3 AS SERV2,
cs2.descr_ser AS SSERV, s.moeda_sale, s.id_moeda, s.inc_opc,
s.tot_netps, subs.tot_net, s.tot_ft, s.tot_saleps,
fs.val_conf, subs.st_pag, fa.val_fat

FROM FAT_APAG fa INNER JOIN FATSER fs
ON fa.nro_fat = fs.nro_fat
LEFT JOIN SERV s
ON fs.nro_file = s.nro_file AND fs.nro_ser = s.nro_ser
LEFT JOIN SSERV subs
ON s.nro_file = subs.nro_file AND s.nro_ser = subs.nro_ser
LEFT JOIN SERVCRES ss
ON s.nro_file = ss.nro_file AND s.nro_ser = ss.nro_ser
INNER JOIN CHEQUECP ccp
ON fa.nro_cheque = ccp.nro_cheque AND fa.id_banco = ccp.id_banco AND fa.id_agencia = ccp.id_agencia
AND fa.nro_conta = ccp.id_conta
INNER JOIN TAB_BCO b
ON fa.id_banco = b.id_bco
LEFT JOIN CADSER cs
ON s.id_ser = cs.id_ser
LEFT JOIN CADSER cs2
ON subs.id_ser = cs2.id_ser
INNER JOIN CADFOR f
ON fa.id_for = f.id_for

WHERE fa.st_pag < ´3´ AND fa.lt_ou_chq = ´C´
ORDER BY fa.nro_cheque,fa.nro_fat[/size:103b108635]


O UNION queria fazer assim :


SELECT fa.nro_cheque, b.nome_bco, ccp.dt_cheque, ccp.valor AS VALORCHEQUE,
fa.nro_fat AS INV, f.nome_for, fa.dt_fat, fa.val_total AS VALORFATURA


FROM FAT_APAG fa INNER JOIN FATSER fs
ON fa.id_fat = fs.id_fat
INNER JOIN CHEQUECP ccp
ON fa.nro_cheque = ccp.nro_cheque
AND fa.id_banco = ccp.id_banco
AND fa.id_agencia = ccp.id_agencia
AND fa.nro_conta = ccp.id_conta
INNER JOIN TAB_BCO b
ON fa.id_banco = b.id_bco
INNER JOIN CADFOR f
ON fa.id_for = f.id_for
UNION ( SELECT xxxx
FROM SERV s
ON fs.nro_file = s.nro_file AND fs.nro_ser = s.nro_ser
LEFT JOIN SSERV subs
ON s.nro_file = subs.nro_file AND s.nro_ser = subs.nro_ser
LEFT JOIN SERVCRES ss
ON s.nro_file = ss.nro_file AND s.nro_ser = ss.nro_ser
LEFT JOIN CADSER cs
ON s.id_ser = cs.id_ser
LEFT JOIN CADSER cs2
ON subs.id_ser = cs2.id_ser )
. . .

Mas nao sei se é possivel. O Arquivo de 55 Mb é o SERV, por isso queria q o JOIN com ele fosse efetuado so depois de ja ter as linhas q realmente me interessam, pois os dados nele sao os detalhes.


Obrigado de uma vez galera!!!


Thiagodede

Thiagodede

Responder

Posts

14/12/2005

Sremulador

provavelmente este ´montes´ de join que esta fazendo sua consulta demorar...


Responder

14/12/2005

Thiagodede

Provavelmente nao!!! É isso

Isso eu ja sei.. queria saber se havia outros modos de fazer a consulta, de modo a agilizar. EX.. fazer um select menor primiero, q precise de 1 join so, para depois fazer os outros join, pois teriam menos linhas...

Sacou..


Responder

15/12/2005

Pereiramarcos

ja tentou tranformar suas tabelas em conjunto e aplicara regras de conjunto as vezes ajuda nestes casos complexos de querye


Responder

15/12/2005

Thiagodede

Como faço isso!?
Nao sei !! hehe


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar