Fórum select POSTGRE duplicando registro #383933
18/08/2010
SELECT cf.pedido, cf.data, nc.qtd, nc.preco, c.nome as comprador, c.nome as vendedor, c.cnpj as cnpj comprador
FROM notacalculo nc
LEFT OUTER JOIN contratos cf ON (nc.pedido = cf.pedido)
LEFT OUTER JOIN clientes c ON (nc.codcomp = c.codigo)
WHERE cf.data BETWEN '01/01/10' AND '30/01/10' AND
(nc.codcomprador = 10 AND nc.corretagemcomprador > 0) OR
(nc.codvendedor = 10 AND nc.corretagemvendedor > 0)
Posts
18/08/2010
Eriley Barbosa
Tente com os parenteses fazendo a prioridade
SELECT cf.pedido, cf.data, nc.qtd, nc.preco, c.nome as comprador, c.nome as vendedor, c.cnpj as cnpj comprador
FROM notacalculo nc
LEFT OUTER JOIN contratos cf ON (nc.pedido = cf.pedido)
LEFT OUTER JOIN clientes c ON (nc.codcomp = c.codigo)
WHERE (cf.data BETWEN '01/01/10' AND '30/01/10') AND
( (nc.codcomprador = 10 AND nc.corretagemcomprador > 0) OR
(nc.codvendedor = 10 AND nc.corretagemvendedor > 0))
Atenciosamente
Eriley
Boa tarde, olha sua seleção está errada, observe que o nome do comprador e o vendedor esta vindo da mesma tabela denominada "c" faça a correção destes que não vai se repetir.
SELECT cf.pedido, cf.data, nc.qtd, nc.preco, cp.nome as comprador, vd.nome as vendedor, cp.cnpj as cnpj comprador
FROM notacalculo nc
LEFT OUTER JOIN contratos cf ON (nc.pedido = cf.pedido)
LEFT OUTER JOIN clientes cp ON (nc.codcomp = c.codigo)
LEFT OUTER JOIN clientes vd ON (nc.codvend = c.codigo)
WHERE (cf.data BETWEN '01/01/10' AND '30/01/10') AND
(nc.codcomprador = 10 AND nc.corretagemcomprador > 0) OR
(nc.codvendedor = 10 AND nc.corretagemvendedor > 0)
SELECT cf.pedido, cf.data, nc.qtd, nc.preco, cp.nome as comprador, vd.nome as vendedor, cp.cnpj as cnpj comprador
FROM notacalculo nc
LEFT OUTER JOIN contratos cf ON (nc.pedido = cf.pedido)
LEFT OUTER JOIN clientes cp ON (nc.codcomp = c.codigo)
LEFT OUTER JOIN clientes vd ON (nc.codvend = c.codigo)
WHERE (cf.data BETWEN '01/01/10' AND '30/01/10') AND
(nc.codcomprador = 10 AND nc.corretagemcomprador > 0) OR
(nc.codvendedor = 10 AND nc.corretagemvendedor > 0)
ASSIM DARIA CERTO ???
SELECT cf.pedido, cf.dtvenda, cf.qtde, cf.preco, cp.nome as comprador, vd.nome as vendedor,
clientes.cnpj_cpf as cliente
FROM notacalculo nc
LEFT OUTER JOIN contratos cf ON (nc.codpedido = cf.pedido)
LEFT OUTER JOIN clientes cp ON (nc.codcomp = cp.codigo)
LEFT OUTER JOIN clientes vd ON (nc.codvend = vd.codigo)
WHERE (cf.dtvenda BETWEEN '2010-08-11' AND '2010-08-30') AND
(nc.codcomp = 1 AND nc.corretcomp > 0) OR
(nc.codvend = 1 AND nc.corretvend > 0)
vamos ao sql correto, esse campo: clientes.cnpj_cpf as cliente NA VERDADE É O CNPJ DO CLIENTE 1 QUE ESTA EM WHERE. SENDO ELE VENDEDOR OU COMPRADOR.
NÃO SEI COMO SELECIONAR O CNPJ DO CLIENTE DIGITADO NA PESQUISA? TA DANDO ERRADO.
ASSIM DARIA CERTO ???
Bom dia, veja só, voce está fazendo o relacionamento apenas com "c" faça as correções assim como:
SELECT cf.pedido, cf.data
, nc.qtd, nc.preco
, cp.nome AS comprador
, vd.nome AS vendedor
, cp.cnpj AS cnpj comprador
FROM notacalculo nc
LEFT JOIN contratos cf
ON (nc.pedido = cf.pedido)
LEFT JOIN clientes cp
ON (nc.codcomp = cp.codigo)
LEFT JOIN clientes vd
ON (nc.codvend = vd.codigo)
WHERE (cf.data BETWEN '01/01/10' AND '30/01/10')
AND ((nc.codcomprador = 10 AND nc.corretagemcomprador > 0)
OR (nc.codvendedor = 10 AND nc.corretagemvendedor > 0))