Em 7 de setembro de 2011 17:29, Pedro B. Alves
<pedroalve...@gmail.com> escreveu:
>>> Tenho os clentes (1,2)
>>> Cliente 1 tem os produtos (10,11,36,37)
>>> Cliente 2 tem os produtos (16,12,36,37)
>>>
>>> select distinct codigo_cliente
>>>  from pvenda
>>>  where EXISTS (select codigo_cliente
>>>                 from pvenda
>>>                where produto = 10)
>>>   and EXISTS (select codigo_cliente
>>>                 from pvenda
>>>                where produto = 11)
>>>
>>> Eu quero os clientes que tem o produto (10 e 11)
>>>
>>> e neste resultado traz os 2 clientes.
>>>
>>
>>
>> Tente uma abordagem diferente:
>>
>> select distinct codigo_cliente
>>  from pvenda INNER JOIN (VALUES (10), (11)) foo(bar) ON pvenda.produto
>> = foo.bar;
>>
>> Em VALUES coloque todos os produtos desejados.
>>
>
>
> Mas se eu colocar o produto (10) no cliente 2, o resultado deste
> select vai mostrar o cliente 1 e 2.
>
> Ficaria:
> Cliente 1 tem os produtos (10,11,36,37)
> Cliente 2 tem os produtos (16,12,36,37,10)
>
> Resultado do sql: 1,2


bdteste=# CREATE TEMP TABLE clientes(
bdteste(# cod int,
bdteste(# produto int);
CREATE TABLE
bdteste=#
bdteste=# INSERT INTO clientes VALUES (1,10), (1,11), (1,36), (1,37);
INSERT 0 4
bdteste=# INSERT INTO clientes VALUES (2,16), (2,12), (2,36), (2,37), (2,10);
INSERT 0 5
bdteste=#
bdteste=# SELECT clientes.cod
bdteste-# FROM clientes INNER JOIN (VALUES (10), (11)) produtos(cod)
ON clientes.produto = produtos.cod
bdteste-# GROUP BY clientes.cod HAVING count(*) = 2;
 cod
-----
   1
(1 row)

 -- coloque na cláusula HAVING a quantidade de produtos

Osvaldo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a