Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

M. Simão

[Resolvido] SQL para verificar se um produto possui um conjunto d

Recommended Posts

Oi pessoal,

 

Estou procurando uma maneira de fazer essa busca, mas ainda não consegui, quem puder me ajudar ou dar uma dica, ficarei bastante grato.

 

Tenho uma tabela de produtos e outra que contém os filtros destes produtos (Fabricante, cor, tamanho e etc), para ilustrar o esquema de forma simplificada, ele está assim:

 

 

Produto

-------

codigo

descricao

 

 

Filtro

------

codigo

codigo_produto

descricao

 

 

A busca que quero fazer é a seguinte, preciso saber por exemplo os produtos que tenham definidos os filtros de código 1, 5, 8 e 20. O problema que estou encontrando é que eles estão em linhas diferentes, então não estou encontrando uma forma de retornar os produtos que necessariamente precisam ter todos os filtros que eu estou informando.

 

Agradeço qualquer dica desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi pessoal,

 

Estou procurando uma maneira de fazer essa busca, mas ainda não consegui, quem puder me ajudar ou dar uma dica, ficarei bastante grato.

 

Tenho uma tabela de produtos e outra que contém os filtros destes produtos (Fabricante, cor, tamanho e etc), para ilustrar o esquema de forma simplificada, ele está assim:

 

 

Produto

-------

codigo

descricao

 

 

Filtro

------

codigo

codigo_produto

descricao

 

 

A busca que quero fazer é a seguinte, preciso saber por exemplo os produtos que tenham definidos os filtros de código 1, 5, 8 e 20. O problema que estou encontrando é que eles estão em linhas diferentes, então não estou encontrando uma forma de retornar os produtos que necessariamente precisam ter todos os filtros que eu estou informando.

 

Agradeço qualquer dica desde já!

 

hã? :(

Juro que tentei entender :ermm:

 

Poste o select que e o resultado que esta encontrando e o resultado esperado. :P Fica mais fácil.

 

Ah, qual sua versão do SQL?

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

hã? :(

Juro que tentei entender :ermm:

 

Poste o select que e o resultado que esta encontrando e o resultado esperado. :P Fica mais fácil.

 

Ah, qual sua versão do SQL?

 

Abçs

 

:D

 

Realmente é meio confuso mesmo! Mas vou tentar explicar melhor, imagine a situação abaixo.

 

Tenho o produto código 10 chamado 'Produto teste' e quero saber se ele possui na tabela Filtros, os filtros de código 2, 1 e 10.

 

Não estou conseguindo montar essa query, já pensei em usar IN, mas ela vai levar em consideração cada linha e não o resultado como um todo.

 

Espero ter conseguido ser mais claro agora, valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O cenario é parecido com este??

 

declare @produto table ( 

codigo int identity (1,1) , descricao varchar(200) 

) 

declare @filtro table ( 

codigo int identity (1,1) ,  

codigo_produto bigint,  

descricao varchar(200) 

) 



insert into @produto values ('Produto Teste') 

insert into @filtro values (1,'descricao A') 

insert into @filtro values (1,'descricao B') 

select * from @produto 

select * from @filtro

 

E qual a sua versão do SQL?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O cenario é parecido com este??

 

O cenário para simulação seria esse mesmo. Imagine agora que você coloque muitos produtos e muitos filtros e depois você queira saber todos os códigos de produtos que possuam os filtros de código 1, 10, 15 e 20 por exemplo. É essa busca que não estou conseguindo fazer.

 

Lembrando que o produto deve possuir os filtros 1 e 10 e 15 e 20, ou seja, todos que foram informados.

 

A versão que estou usando é a 2005.

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja se isso serve:

 

select produto.nome
from produto
inner join filtro 
on produto.idfiltro = filtro.idfiltro
where filtro.idfiltro in(1,10,15,20)
group by produto.nome
having count(*) = 4

 

a idéia é que eu faço um inner dos 4 filtros. sendo assim retornará no count de 1 a 4 dependendo de quantos filtros tenha. como só quero os produtos que tenham os 4 filtros, então faço o having count(*) = 4

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja se isso serve:

 

select produto.nome
from produto
inner join filtro 
on produto.idfiltro = filtro.idfiltro
where filtro.idfiltro in(1,10,15,20)
group by produto.nome
having count(*) = 4

 

a idéia é que eu faço um inner dos 4 filtros. sendo assim retornará no count de 1 a 4 dependendo de quantos filtros tenha. como só quero os produtos que tenham os 4 filtros, então faço o having count(*) = 4

 

Oi Fabio,

 

Cara, serviu como uma luva! :clap:

 

Muito obrigado, mesmo! Já tinha esgotado todas as lógicas ao meu alcance, tava entrando na fase da crise existencial e não saia essa danada dessa query! :lol:

 

Aquele abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.