[firebase-br] Duvida na melhor maneira de fazer um Select

Marcelo Silva marcvan em ig.com.br
Qui Jul 5 08:43:43 -03 2007


Pelo que estou vendo vc ta tentando fazer isso na mesma tabela...
Acho que será impossível trazer cliente de uma tabela quando eles nao estao 
lá.
O que deve ser feito é um inner com outra tabela onde esteja cadastrados 
todos os clientes

Olha o exemplo

Tabelas VENDAS e CLIENTES

SELECT
  COALESCE(COUN(VEN.COD_CLI),0) AS QTD_VENDAS,
  CLI.NOME_CLI
FROM VENDAS VEN
INNER JOIN CLIENTES CLI ON(CLI.COD_CLI = VEN.COD_CLI)
WHERE
  (VEN.DATA_VENDA BETWEEN :PDATA_INI AND :PDATA_FIM)
GROUP BY CLI.NOME_CLI
HAVING (COUNT(VEN.COD_CLI) = 0)

*Procure sempre que possivel usar BETWEEN pois assim vc limita a pesquisa na 
data exata e nao confunde o resultado, por exemplo se eu usar DATA < ? ele 
me trara todas as datas desde a criacao do banco assim seu resultado será 
enorme se tiver muitas vendas... e nenhum humano trabalha com tantos 
resultados ao mesmo tempo :)

Com BETWEEN se ele quiser trazer todos é só colocar DATA_INI = 1900  e a 
DATA_FIM = Maior que a data atual

Digo 1900 a nao ser que o seu usuario tenha mais de 100 anos :) heheh

----------------------------------------
Marcelo Silva
msn: marcvan em ig.com.br
cel: (11) 9693-4251










----- Original Message ----- 
From: "Prowin Informática" <prowin em prowin.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Wednesday, July 04, 2007 6:37 PM
Subject: Re: [firebase-br] Duvida na melhor maneira de fazer um Select


NOT IN é sempre muito lento...

Esse é um recurso que REALMENTE eu jamais aconselharia.

Não tenho a sentença aqui na minha cabeça, mas você pode buscar os clientes
onde um SELECT Count(*) ... seja igual a zero.


----- Original Message ----- 
From: "Forrest®" <fernando em gramatura.com.br>
To: <lista em firebase.com.br>
Sent: Wednesday, July 04, 2007 3:19 PM
Subject: [firebase-br] Duvida na melhor maneira de fazer um Select


Boa Tarde pessoal vou tentar explicarm minha duvida.
Estou usando o FB 1.5.3 e tenho uma tabela com a seguinte estrutura
resumida

VENDAS
------
Cod_Venda (PK)
Cod_Cliente (FK de CLIENTES)
Data_Venda

Eu preciso fazer um select para pegar todos os clientes que não possuí
nenhuma venda apartir de uma data que eu informo. Gostaria de saber a
melhor forma de fazer isso, já tentei usando um sub-select mas ficou
muito lento. Alguém poderia dar exemplos da melhor maneira? O Select
que montei e Ficou lento foi o Seguinte e nen sei se está certo tb
dessa maneira. Qualquer ajuda será bem vinda.

SELECT DISTINCT(V1.COD_CLIENTE) AS CLIENTE1
FROM VENDAS V1
WHERE (DATA_VENDA < :DATAVENDA) AND
      (V1.COD_CLIENTE NOT IN (SELECT DISTINCT(V2.COD_CLIENTE) AS
CLIENTE2 FROM VENDAS V2 WHERE (V2.DATA_VENDA = :DATAVENDA)))

T++++++++++++++

-- 



______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


-- 
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.476 / Virus Database: 269.9.14/883 - Release Date: 1/7/2007
12:19



______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista