Dúvida de SQL.

Delphi

28/07/2003

Estou fazendo um select de duas tabelas, como mostro abaixo:

SELECT P.num_pedido_cli, I.cod_empresa, I.num_pedido
FROM pedidos P, ped_itens I
WHERE P.num_pedido = I.num_pedido

Tenho uma outra tabela chamada Historico onde também tenho o num_pedido.

Queria selecionar todos os pedidos (da query acima) e que não contenha na tabela historico.

O que estou fazendo hoje, é criar outra query (Select * from historico where num_pedido =:pedido), onde o parâmetro pedido são todos os num_pedidos achados acima. Daí, se esta query NÃO me retornar algum valor eu faço o processamento desejado.

Obrigada.


Jussara

Jussara

Curtidas 0

Respostas

Fernando

Fernando

28/07/2003

SELECT P.num_pedido_cli, I.cod_empresa, I.num_pedido
FROM pedidos P, ped_itens I
WHERE P.num_pedido = I.num_pedido and
P.Historico is null -- Acrescente essa linha e verifique


ele vai selecionar o pedido onde o historico do pedido for nulo


GOSTEI 0
Jussara

Jussara

28/07/2003

Não é isso que preciso.
Tenho que selecionar todos os pedidos da tabela pedidos, que não contenha na tabela historico. E a chave de ligação das duas é o num_pedido.


GOSTEI 0
Motta

Motta

28/07/2003

em oracle ficaria assim

SELECT P.num_pedido_cli, I.cod_empresa, I.num_pedido
FROM pedidos P, ped_itens I
WHERE P.num_pedido = I.num_pedido (+)
and i.num_pedido is null

dependendo do sql podria ser tb

SELECT P.num_pedido_cli, I.cod_empresa, I.num_pedido
FROM pedidos P
WHERE not exists
(SELECT P.num_pedido_cli, I.cod_empresa, I.num_pedido
FROM pedidos P2, ped_itens I
WHERE P2.num_pedido = I.num_pedido )


GOSTEI 0
Jussara

Jussara

28/07/2003

Acho que não consegui explicar direito o que preciso. Vou resumir melhor.
Tenho duas tabelas: pedidos e historico.
A tabela pedidos tem os campos: num_pedido_cli, num_pedido.
A tabela historico tem o campo: num_pedido.

Na tabela historico tem registros extraídos da tabela pedidos. Agora eu preciso selecionar na tabela pedidos, todos os registros que não constam na tabela historico.

Alguém pode me ajudar?


GOSTEI 0
Buosinet

Buosinet

28/07/2003

Eu entendi o que vc quer, mas vc tá usando que banco?

Me mande, por email, o ExtractDDL das tabelas (só a estrutura, não precisa dados) e eu te ajudo, ok?

Buosi.


GOSTEI 0
Roberto Skylord

Roberto Skylord

28/07/2003

Tente isto

SELECT P.num_pedido_cli, I.cod_empresa, I.num_pedido
FROM (pedidos P INNER JOIN ped_itens I ON P.num_pedido = I.num_pedido) LEFT JOIN historico ON historico.num_pedido = pedidos.num_pedido
WHERE (historico.num_pedido IS NULL)


GOSTEI 0
Jeancamila

Jeancamila

28/07/2003

Mais simples:


SELECT P.num_pedido_cli, I.cod_empresa, I.num_pedido
FROM pedidos P, ped_itens I
WHERE P.num_pedido = I.num_pedido and p.num_pedido not in
(select h.num_pedido from historio h)


Jean Morais
Analista de Sistemas - AIX SISTEMAS


GOSTEI 0
Jussara

Jussara

28/07/2003

Roberto era exatamente isso que precisava. Muito obrigada a todos.


GOSTEI 0
POSTAR