Erro de logica
14/02/2006
0
E ae galera, preciso fazer a seguinte consulta: selecionar meus cliente dentro de tbCliente sendo que preciso usar a tbPedidos para separar quem comprou arroz e quem nao comprou feijao. Como faco isso?
lembrando se o mesmo cliente comprou os 2 produtos ele precisa ficar fora da selecao.
Vlw
:D
lembrando se o mesmo cliente comprou os 2 produtos ele precisa ficar fora da selecao.
Vlw
:D
Only
Curtir tópico
+ 0
Responder
Posts
15/02/2006
Aroldo Zanela
Colega,
Coloque a estrutura das tabelas (DDL) para facilitar nosso entendimento.
Coloque a estrutura das tabelas (DDL) para facilitar nosso entendimento.
Responder
16/02/2006
Wcrivelini
a primeira coisa a dizer é que, em SQL, normalmente temos mais de uma forma de resolver os problemas.
vou escrever a forma q me parece mais fácil de entender a mecânica do processo.
como nao conheço a estrutura das tabelas q vc tem, vou escrever um SELECT assumindo uma nomenclatura de campos e tabelas.
PREMISSAS:
1. supus q a chave primária na tabela tblCliente seja pkCliente
2. é preciso ter ainda uma tabela de produtos (tblProduto), com chave primaria pkProduto
3. normalmente vc teria uma tabela de pedidos (tblPedido) com dados genéricos do pedido e chave primária pkPedido e chave estrangeira fkCliente.
4. haveria ainda outra tabela com detalhes do pedido (tblPedidoDetalhe), com uma chave primária composta por 2 campos: fkPedido e fkProduto.
considerados separadamente, estes campos são chaves estrangeiras pra junção com as tabelas tblPedido e tblProduto.
5. podemos subdividir esta consulta em vários pequenos passos pra obtermos o resultado desejado. O primeiro passo é identificar os pedidos que tem o produto ARROZ
(SELECT fkPedido FROM tblPedidoDetalhe AS INNER JOIN tblProduto P ON D.fkProduto = P.pkProduto WHERE P.Nome = ´ARROZ´)
6. o segundo, identificar os pedidos do produto FEIJAO
(SELECT fkPedido FROM tblPedidoDetalhe AS INNER JOIN tblProduto P ON D.fkProduto = P.pkProduto WHERE P.Nome = ´FEIJAO´)
7. o terceiro, identificar pedidos/clientes que estão na lista do ARROZ e nao estao na lista do FEIJAO, e para isso precisamos juntar as tabelas de clientes e de pedidos.
SELECT C.*
FROM tblPedido AS T INNER JOIN tblCliente AS C ON T.fkCliente = C.pkCliente
WHERE
T.pkPedido IN (SELECT fkPedido FROM tblPedidoDetalhe AS INNER JOIN tblProduto P ON D.fkProduto = P.pkProduto WHERE P.Nome = ´ARROZ´)
AND
T.pkPedido NOT IN (SELECT fkPedido FROM tblPedidoDetalhe AS INNER JOIN tblProduto P ON D.fkProduto = P.pkProduto WHERE P.Nome = ´FEIJAO´)
vou escrever a forma q me parece mais fácil de entender a mecânica do processo.
como nao conheço a estrutura das tabelas q vc tem, vou escrever um SELECT assumindo uma nomenclatura de campos e tabelas.
PREMISSAS:
1. supus q a chave primária na tabela tblCliente seja pkCliente
2. é preciso ter ainda uma tabela de produtos (tblProduto), com chave primaria pkProduto
3. normalmente vc teria uma tabela de pedidos (tblPedido) com dados genéricos do pedido e chave primária pkPedido e chave estrangeira fkCliente.
4. haveria ainda outra tabela com detalhes do pedido (tblPedidoDetalhe), com uma chave primária composta por 2 campos: fkPedido e fkProduto.
considerados separadamente, estes campos são chaves estrangeiras pra junção com as tabelas tblPedido e tblProduto.
5. podemos subdividir esta consulta em vários pequenos passos pra obtermos o resultado desejado. O primeiro passo é identificar os pedidos que tem o produto ARROZ
(SELECT fkPedido FROM tblPedidoDetalhe AS INNER JOIN tblProduto P ON D.fkProduto = P.pkProduto WHERE P.Nome = ´ARROZ´)
6. o segundo, identificar os pedidos do produto FEIJAO
(SELECT fkPedido FROM tblPedidoDetalhe AS INNER JOIN tblProduto P ON D.fkProduto = P.pkProduto WHERE P.Nome = ´FEIJAO´)
7. o terceiro, identificar pedidos/clientes que estão na lista do ARROZ e nao estao na lista do FEIJAO, e para isso precisamos juntar as tabelas de clientes e de pedidos.
SELECT C.*
FROM tblPedido AS T INNER JOIN tblCliente AS C ON T.fkCliente = C.pkCliente
WHERE
T.pkPedido IN (SELECT fkPedido FROM tblPedidoDetalhe AS INNER JOIN tblProduto P ON D.fkProduto = P.pkProduto WHERE P.Nome = ´ARROZ´)
AND
T.pkPedido NOT IN (SELECT fkPedido FROM tblPedidoDetalhe AS INNER JOIN tblProduto P ON D.fkProduto = P.pkProduto WHERE P.Nome = ´FEIJAO´)
Responder
Clique aqui para fazer login e interagir na Comunidade :)