UNION FIRST
Tenho uma consulta que utiliza union, preciso limitar o número de registros desta consulta e para isso utilizo o comando ´first´.
O problema é que não consigo limitar o total de registros selecionados, apenas o total selecionado em cada ´select´.
Ex.:
select first 500 from tabela1
union
select first 500 from tabela2
Assim ele retorna 1000 registros e preciso limitar a 500.
Obs.: posso limitar os registros no ClientDataSet mas gostaria de saber se é possível fazer isto direto no banco.
O problema é que não consigo limitar o total de registros selecionados, apenas o total selecionado em cada ´select´.
Ex.:
select first 500 from tabela1
union
select first 500 from tabela2
Assim ele retorna 1000 registros e preciso limitar a 500.
Obs.: posso limitar os registros no ClientDataSet mas gostaria de saber se é possível fazer isto direto no banco.
Help
Curtidas 0
Respostas
Joaoshi
10/07/2008
Colega, tente assim:
SELECT FIRST 500 * FROM
(
select first 500 from tabela1
union
select first 500 from tabela2
)
Espero ter ajudado.
SELECT FIRST 500 * FROM
(
select first 500 from tabela1
union
select first 500 from tabela2
)
Espero ter ajudado.
GOSTEI 0
Help
10/07/2008
não rolou...
GOSTEI 0
Joaoshi
10/07/2008
Colega, o exemplo que passei funcionou aqui com firebird 2.1
GOSTEI 0
Help
10/07/2008
então é isso...
eu utilizo a versão 1.5...
eu utilizo a versão 1.5...
GOSTEI 0
Help
10/07/2008
quando utilizo PacketRecords onde ocorre o limite de registros? o controle é feito no ClientDataSet ou direto no banco de dados...
Ex.: no exemplo acima ele retorna 1000 do banco e filtra 500 no ClientDataSet ou filtra 500 direto no banco?
Ex.: no exemplo acima ele retorna 1000 do banco e filtra 500 no ClientDataSet ou filtra 500 direto no banco?
GOSTEI 0
Paulo
10/07/2008
O Exemplo do joaoshi funcionou comigo aqui. Não acho que seja a versão do Banco não. Pode ser alguma coisa aí na sua Sql. Se eu fizer com Oracle e SqlServer, também funciona. Isso aí é SQL. O que pode acontecer é o FB 1.5 não suportar First, isso eu não tenho certeza. Fiz com SqlServer usando TOP também funcionou. Veja aí o seu código.
GOSTEI 0
Help
10/07/2008
o first está disponível para a versão 1.5 do firebird...
acho que o problema não está no meu SQL porque ele funciona sem usar o SQL externo para fazer o limite de dados...
acho que o problema não está no meu SQL porque ele funciona sem usar o SQL externo para fazer o limite de dados...
GOSTEI 0
Help
10/07/2008
mais alguma dica?
GOSTEI 0
Lip
10/07/2008
fera,
select first 15 nome
from cl_pacientes
funcionou sem problemas...
como eh o seu sql??(se vc tiver resolvido dá um aviso xD)
select first 15 nome
from cl_pacientes
funcionou sem problemas...
como eh o seu sql??(se vc tiver resolvido dá um aviso xD)
GOSTEI 0
Lip
10/07/2008
desconsiderando minha msg anterior
esse exemplo serve pra vc?
select first 15 nm from (select first 15 p.nome as nm
from cl_pacientes p
union
select first 15 a.nome as nm
from cl_atendimentos a)
esse exemplo serve pra vc?
select first 15 nm from (select first 15 p.nome as nm
from cl_pacientes p
union
select first 15 a.nome as nm
from cl_atendimentos a)
GOSTEI 0
Help
10/07/2008
é mesmo, mas não funciona no firebird 1.5...
resolvi utilizando a propriedade PacketRecords do ClientDataSet...
valeu!
resolvi utilizando a propriedade PacketRecords do ClientDataSet...
valeu!
GOSTEI 0