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