Meu caro, a resposta para o seu problema chama-se OUTER JOIN. Se ainda não foi 
apresentado a ele, eis um exemplo baseado na sua dificuldade. Detalhe: aqui 
estou fazendo uso de JOINs explícitos. O que vc usou são JOINS implícitos por 
meio do operador AND na cláusula WHERE. Para saber mais sobre OUTER JOINs, 
JOINs explícitos e implícitos, sugiro que vc procure por artigos que falem 
sobre linguagem SQL padrão e (melhor ainda) algebra relacional.

  SELECT TCLIENTE.NOMECLIENTE, TMOV.DATAENTRADA, TMOV.HORAENTRADA,
         TMOV.HORASAIDA, TMOV.ID, TPRECO.DESCRICAO, TPRECO.VALOR, 
TMOV.VALORTOTAL,
         TPRODUTO.DESCRICAO, TITMOV.QUANTIDADE, TITMOV.PRECOUNITARIO
    FROM TMOV
         JOIN TPRECO ON TPRECO.ID = TMOV.IDPRECO
         JOIN TCLIENTE ON TMOV.IDCLIENTE = TCLIENTE.ID
         OUTER JOIN TITMOV ON TMOV.ID = TITMOV.IDMOV
         OUTER JOIN TPRODUTO ON TPRODUTO.ID = TITMOV.IDPRODUTO
   WHERE TMOV.POSICAO = 'F' AND TMOV.DATA_INC = :Data_Inc
ORDER BY TMOV.ID

(Não testei pq não tenho seu banco de dados pra avaliar, mas acredito que deva 
funcionar!)

Boa sorte.
Sds.


________________________________

To: delphi-br@yahoogrupos.com.br
From: [EMAIL PROTECTED]
Date: Wed, 23 Jan 2008 09:37:46 -0800
Subject: [delphi-br] Dúvida SQL







Amigos, estou com uma dúvida de relacionamento que é o seguinte, tenho a 
seguinte sentença:

SELECT TCLIENTE.NOMECLIENTE, TMOV.DATAENTRADA, TMOV.HORAENTRADA, TMOV.HORASAIDA,
TMOV.ID, TPRECO.DESCRICAO, TPRECO.VALOR, TMOV.VALORTOTAL, TPRODUTO.DESCRICAO,
TITMOV.QUANTIDADE, TITMOV.PRECOUNITARIO
FROM TMOV, TITMOV, TCLIENTE, TPRODUTO, TPRECO
WHERE TMOV.ID = TITMOV.IDMOV
AND TMOV.IDCLIENTE = TCLIENTE.ID
AND TMOV.IDPRECO = TPRECO.ID
AND TITMOV.IDPRODUTO = TPRODUTO.ID
AND TMOV.POSICAO = 'F'
AND TMOV.DATA_INC = :Data_Inc
ORDER BY TMOV.ID

Nessa sentença eu tenho uma tabela de movimento (TMOV) que relaciona com a 
tabela de cliente (TCLIENTE), preço (TPRECO) e itens do movimento (TITMOV), e a 
tabela (TITMOV) relaciona com a tabela de produto (TPRODUTO), porém nem sempre 
todo movimento terá itens consumidos, mais eu preciso que mostre os demais 
campos (NOMECLIENTE, DATAENTRADA, HORAENTRADA...). Quando eu executo esse 
script no Interbase ele só me traz os registros que além de atender minhas 
excessões da where tem que conter registros em todas as tabelas.

Como eu contorno isso, ou seja, como faço para me retornar dados mesmo quando 
meu movimento não tiver itens? Só para esclarecer, minha tabela de movimento 
registra a entrada e saída de clientes e quando um cliente entra ele pode 
consumir determinados produtos ou não que são controlados pela tabela de itens 
(TITMOV).

Grande abraço,

Angelo Louzada

Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!
http://br.mail.yahoo.com/

[As partes desta mensagem que não continham texto foram removidas]









_________________________________________________________________
Conheça o Windows Live Spaces, a rede de relacionamentos do Messenger!
http://www.amigosdomessenger.com.br/

Responder a