UNION FIRST

Firebird

10/07/2008

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.


Help

Help

Curtidas 0

Respostas

Joaoshi

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.


GOSTEI 0
Help

Help

10/07/2008

não rolou...


GOSTEI 0
Joaoshi

Joaoshi

10/07/2008

Colega, o exemplo que passei funcionou aqui com firebird 2.1


GOSTEI 0
Help

Help

10/07/2008

então é isso...

eu utilizo a versão 1.5...


GOSTEI 0
Help

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?


GOSTEI 0
Paulo

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

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...


GOSTEI 0
Help

Help

10/07/2008

mais alguma dica?


GOSTEI 0
Lip

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)


GOSTEI 0
Lip

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)


GOSTEI 0
Help

Help

10/07/2008

é mesmo, mas não funciona no firebird 1.5...

resolvi utilizando a propriedade PacketRecords do ClientDataSet...

valeu!


GOSTEI 0
POSTAR