Fórum Pesquisa em duas tabelas iguais #260992
02/12/2004
0
Possuo duas tabelas, VendaHj e VendaAnt, ambas possuem os mesmos campos. Durante o dia eu gravo os dados na tabela VendaHj, e no fim do dia eu pego os dados e transfiro para VendaAnt.
Só que agora estou precisando tirar um relatório de vendas dos dias anteriores até o dia de hj, ou seja, uma consulta nas duas tabelas ao mesmo tempo.
Eis a minha dúvida: Como fazer a consulta nas duas tabelas ao mesmo tempo ? Se possível, coloquem um exemplo com query.
Meu BD é o Mysql 3.23.46, uso o Zeos para acessá-lo e Delphi 5 como ferramenta de desenvolvimento.
Grato pela atenção.
Turbo Drive
Curtir tópico
+ 0Posts
02/12/2004
Paulo_amorim
Pode-se utilizar o comando UNION...
SELECT * FROM tab1 UNION ALL SELECT * FROM tab2
Isso irá juntar os 2 resultsets... repare que só se pode fazer union se os campos estiverem em quantidades iguais e tipos iguais ... como você disse que os campos das tabelas são idênticos, não há com o que se preocupar
Espero que ajude
Até+
Gostei + 0
02/12/2004
Turbo Drive
Ex:
QTeste.close;
QTeste.sql.clear;
QTeste.sql.add(´(select CodigoItem, diavenda from VendaHj) union (select CodigoItem, diavenda from VendaAnt) where diavenda >=:inicio and diavenda <=:fim order by diavenda´);
QTeste.parambyname(´inicio´).asdatetime := strtodate(´30/11/04´);
QTeste.parambyname(´fim´).asdatetime := strtodate(´01/12/04´);
QTeste.open;
Eu tentei este código e está me retornando erro de sintaxe. Poderia me informar onde eu estou errando ?
Grato pela atenção.
Gostei + 0
02/12/2004
Paulo_amorim
Seu where está fora de qualquer query. Está ´solto´ na sintaxe, por isso o erro. No caso, vc poderia fazer:
1- Colocar esse where nas 2 queries
(SELECT <campos> FROM tabela1 WHERE <condicao>) UNION (SELECT <campos> FROM tabela2 WHERE <campos>)
2- Fazer um select nessas 2 tabelas juntas e depois aplicar o filtro
SELECT * FROM(SELECT <campos> FROM tabela1 UNION SELECT <campos> FROM tabela2) WHERE <condicao>
Como você afirmou que está trabalhando com MySQL3.x , ele não deve aceitar subselects e, portanto, deve-se usar a opção 1, que imagino funciona
Espero que ajude
Até+
Gostei + 0
03/12/2004
Turbo Drive
QTeste.close;
QTeste.sql.clear;
QTeste.sql.add(´(select CodigoItem, diavenda from VendaHj where diavenda >=:inicio and diavenda <=:fim order by diavenda) union (select CodigoItem, diavenda from VendaAnt where diavenda >=:inicio and diavenda <=:fim order by diavenda) ´);
QTeste.parambyname(´inicio´).asdatetime := strtodate(´30/11/04´);
QTeste.parambyname(´fim´).asdatetime := strtodate(´01/12/04´);
QTeste.open;
Mas infelizmente, não deu certo.
Caso alguém tenha alguma sugestão, fico agradecido.
Gostei + 0
03/12/2004
Aroldo Zanela
Use [b:4e5a6e99b9]Union All[/b:4e5a6e99b9] e o [b:4e5a6e99b9]order by [/b:4e5a6e99b9]deve ser único no final de todas as uniões.
select CodigoItem, diavenda from VendaHj where diavenda >= :inicio and diavenda <= :fim union all select CodigoItem, diavenda from VendaAnt where diavenda >= :inicio and diavenda <= :fim order by diavenda
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)