Duvida Select

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
leandrolinof
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 33
Registrado em: Qua, 17 Fev 2010 6:30 am
Localização: Americana

Pessoal bom dia!

Estou com a seguinte duvida.

Tenho um relatorio no qual a pessoa vai passar entre 10 Prod e 10 Qtde desses Prod.
Cada Prod desse digitado e Qtde vai ser uma composicao de um produto em especifico.
Até ai tudo bem consegui fazer uma select que me traga isso, so que ela ta trazendo o seguinte: Vamos supor que digito la 2 produtos so ele me traz no relatorio todos os produtos que são compostos de apenas dois produtos, e que neles contenha pelo menos um Prod digitado por mim como parametro.
E não é isso que eu quero, quero que ele traga apenas os produtos que tenha os dois Prod que digitei e não todos os produtos que tenham duas composicoes de pelo menos um produto que digitei.

Segue a select que fiz:

Selecionar tudo

select t.*, 
           b.pro_st_alternativo alternativo_item, b.pro_st_descricao descritivo_item,
           p.pro_st_alternativo, p.pro_st_descricao
           
    from mgadm.est_produtos            p,
         mgadm.est_itenslistamateriais t
    inner join mgadm.est_produtos b
    On (b.pro_tab_in_codigo = t.com_tab_in_codigo
    and b.pro_pad_in_codigo = t.com_pad_in_codigo
    and b.pro_in_codigo     = t.com_in_codigo)
    and t.lis_in_revisao    = (Select Max(d.lis_in_revisao) From mgadm.est_revisaolistamateriais d
                               Where d.pro_tab_in_codigo = t.pro_tab_in_codigo
                               and   d.pro_pad_in_codigo = t.pro_pad_in_codigo
                               and   d.pro_in_codigo     = t.pro_in_codigo)
                                 
    where t.pro_tab_in_codigo = p.pro_tab_in_codigo
    and   t.pro_pad_in_codigo = p.pro_pad_in_codigo
    and   t.pro_in_codigo     = p.pro_in_codigo
    
    and   ((b.pro_st_alternativo = &prod1 and t.com_re_segquantidade = &qtde1) or
           (b.pro_st_alternativo = &prod2 and t.com_re_segquantidade = &qtde2))
    and   ( select count(*) from mgadm.est_itenslistamateriais l, mgadm.est_produtos r
                where p.pro_tab_in_codigo = l.pro_tab_in_codigo
                and   p.pro_pad_in_codigo = l.pro_pad_in_codigo
                and   p.pro_in_codigo     = l.pro_in_codigo
                
                And r.pro_tab_in_codigo = l.com_tab_in_codigo
                And r.pro_pad_in_codigo = l.com_pad_in_codigo
                And r.pro_in_codigo = l.com_in_codigo ) = 2;


O problema ta aqui: ((b.pro_st_alternativo = &prod1 and t.com_re_segquantidade = &qtde1) or
           (b.pro_st_alternativo = &prod2 and t.com_re_segquantidade = &qtde2))
Não sei como fazer diferente, se alguém souber, por favor me ajude ai....
leandrolinof
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 33
Registrado em: Qua, 17 Fev 2010 6:30 am
Localização: Americana

Alguém?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Acho que tem que fazer com EXISTS.
Veja se esse exemplo é parecido com o que você precisa:

http://glufke.net/oracle/viewtopic.php?t=441

Ele busca as tabelas que tem o campo X e Y..
E não X ou Y...
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Tem como dar um exemplo do que você quer? Reli várias vezes, mas não consegui entender a explicação sobre que tipos de dados sua tabelas contém nem o que você está tentando extrair delas.
leandrolinof
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 33
Registrado em: Qua, 17 Fev 2010 6:30 am
Localização: Americana

Vou tentar explicar de um modo diferente.

Tenho os seguintes produtos: Caderno Espiral, Livro, Revista, Agenda Espiral

Pra se fazer estes itens tenho que ter vários outros itens: Folha, Arame, Capa Dura, etc...

Na minha Select gostaria de filtrar somente os seguintes itens: Arame e Capa Dura.

Feito isso gostaria que me trouxesse somente os seguintes produtos: Caderno Espiral e Agenda Espiral porque somente eles que utilizam Arame e Capa Dura.

Na minha Select esta vindo todos os produtos, porque, porque todos eles tem pelo menos um item que se utiliza pra fazer-lo...

Não sei se deu pra entender agora com esse exemplo masss foi o unico que me veio a cabeça no momento....
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

É exatamente o select que eu te mandei acima no link, só que com TABELAS.

Veja:
Uma tabela possui varios campos.
Eu quero as tabelas que possuem o campo A e o campo B. (não o campo A ou o campo B).

Pra isso se usa EXISTS... VEja o link que eu passei la em cima pra ver como se faz.
leandrolinof
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 33
Registrado em: Qua, 17 Fev 2010 6:30 am
Localização: Americana

dr_gori

Como não tenho muita experiencia em PL fiz assim...

Selecionar tudo

select t.*, 
       b.pro_st_alternativo alternativo_item, b.pro_st_descricao descritivo_item,
       p.pro_st_alternativo, p.pro_st_descricao
           
from mgadm.est_produtos            p,
     mgadm.est_itenslistamateriais t
     inner join mgadm.est_produtos b
     On (b.pro_tab_in_codigo = t.com_tab_in_codigo
     and b.pro_pad_in_codigo = t.com_pad_in_codigo
     and b.pro_in_codigo     = t.com_in_codigo)
     and t.lis_in_revisao    = (Select Max(d.lis_in_revisao) From mgadm.est_revisaolistamateriais d
                                Where d.pro_tab_in_codigo = t.pro_tab_in_codigo
                                and   d.pro_pad_in_codigo = t.pro_pad_in_codigo
                                and   d.pro_in_codigo     = t.pro_in_codigo)

where t.pro_tab_in_codigo = p.pro_tab_in_codigo
and   t.pro_pad_in_codigo = p.pro_pad_in_codigo
and   t.pro_in_codigo     = p.pro_in_codigo

and exists (select 1 from mgadm.est_produtos b, mgadm.est_itenslistamateriais t
            where b.pro_st_alternativo = &prod1 and t.com_re_segquantidade = &qtde1)
and exists (select 1 from mgadm.est_produtos b, mgadm.est_itenslistamateriais t
            where b.pro_st_alternativo = &prod2 and t.com_re_segquantidade = &qtde2)
            
and   (select count(*) from mgadm.est_itenslistamateriais l, mgadm.est_produtos r
       where p.pro_tab_in_codigo = l.pro_tab_in_codigo
       and   p.pro_pad_in_codigo = l.pro_pad_in_codigo
       and   p.pro_in_codigo     = l.pro_in_codigo
                
       and r.pro_tab_in_codigo = l.com_tab_in_codigo
       and r.pro_pad_in_codigo = l.com_pad_in_codigo
       and r.pro_in_codigo = l.com_in_codigo ) = 2;


Não tenho ideia de como fazer diferente....
leandrolinof
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 33
Registrado em: Qua, 17 Fev 2010 6:30 am
Localização: Americana

Alguém que já tenha feito algo parecido pode me dar um help????
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Me desculpe, eu entendi sua explicação em português, mas como que isso se traduz no seu modelo de dados ainda está no escuro. Leia seu post com a visão de quem não conhece nada sobre seu sistema, se ponha no nosso lugar. Então depois forneça mais explicações e exemplos concretos, formas da gente conseguir te ajudar.

Tem como postar a estrutura das tabelas e os dados de exemplo para que a gente possa rodar um SQL em cima do modelo? Peço um exemplo simplificado, quanto mais simples melhor, só para poder executar algo nele que atenda seu problema, só com as colunas necessárias das tabelas em questão, nem mais nem menos.

Por exemplo, com algo assim daria para te ajudar:

Selecionar tudo

-- a tabela est_produtos armazena tal coisa, e serve para isso e aquilo
-- quais são suas colunas e para que servem (pk, fks)
create table est_produtos (pro_tab_in_codigo  number(10) primary key,
                           pro_pad_in_codigo  number(10),
                           pro_in_codigo      number(10),
                           pro_st_descricao   varchar2(100),
                           pro_st_alternativo varchar2(100));
-- forneça dados de exemplo significativos para ilustrar seu problema e 
-- descobrirmos uma solução válida
insert into est_produtos values (1, 100, 55, 'CADERNO ESPIRAL', 'NÃO SEI');
insert into est_produtos values (2, 200, 65, 'LIVRO', 'SEI LÁ');
insert into est_produtos values (3, 300, 75, 'AGENDA ESPIRAL', 'HEIN?');
-- 
create table est_itenslistamateriais (cod_item_lista    number(10) primary key,
                                      com_tab_in_codigo number(10),
                                      com_in_codigo     number(10),
                                      com_re_segquantidade number(10));
-- a tabela itens de lista de materiais contém a relação de produtos (?) pertencentes
-- a uma lista de materiais, na coluna tal fica tal atributo, que quero usar para
-- descobrir tal coisa (ou não, sei lá...)
insert into est_itenslistamateriais values (xxx, yyy, zzz, aaa);
insert ...
insert ...
-- a tabela abaixo armazena abc e relaciona com a tabela tal, na coluna x fica o valor
-- que me interessa, que quer dizer tal coisa
create table est_revisaolistamateriais (cod_revisao        number(10) primary key,
                                        pro_pad_in_codigo  number(10),
                                        pro_in_codigo      number(10),
                                        pro_st_descricao   varchar2(100),
                                        t.lis_in_revisao   );
insert into est_revisaolistamateriais values (1, 2, 3, 'dumdum');
insert into ...
insert into ...
Agora quero obter apenas os materiais que blá blá...
...
Usando os dados acima, se eu informar &prod2 = 5 e &qtde2 = 10, quero que seja retornado:

Selecionar tudo


pro_tab_in_codigo   pro_pad_in_codigo   pro_in_codigo
-------------------------------------------------
1                   534                 'LIVRO'
12                  99                  'CADERNO'
As linhas tal e tal e tal não aparecem porque... blá blá blá...
se houvesse uma linha com valor XXX na coluna BLAH da tabela YYY, então a linha
XXX da tabela HHH apareceria também porque... blá blá blá.
De novo... esse é o meu exemplo de como dar um exemplo que seja útil para nós. Por favor, não leve a mal, conversa de fórum demora muito para se desenvolver se tudo não é explicado de primeira, se o exemplo não for expressivo e de acordo com a realidade e complexidade do seu sistema.

Abraço,
Francisco.
leandrolinof
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 33
Registrado em: Qua, 17 Fev 2010 6:30 am
Localização: Americana

PRO_TAB_IN_CODIGO NUMBER(3) 100 - "Cód. Tabela Itens Código da Tabela Itens."
PRO_PAD_IN_CODIGO NUMBER(3) N "Cód. Padrão Itens
Código padrão da tabela Itens."
PRO_IN_CODIGO NUMBER(7) N "Cod. Item
Codigo do Item Estoque"
PRO_ST_DESCRICAO VARCHAR2(70) N "Item
Descrição do Item"
PRO_ST_ALTERNATIVO VARCHAR2(50) N "Código Alternativo
Código Alternativo"
leandrolinof
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 33
Registrado em: Qua, 17 Fev 2010 6:30 am
Localização: Americana

Estrutura das Tabelas

Tabela de Produtos =

Selecionar tudo

PRO_TAB_IN_CODIGO NUMBER(30) - "Cód. Tabela Itens Código da tabela Itens."
PRO_PAD_IN_CODIGO NUMBER(3) - "Cód. Padrão Itens Código padrão da tabela Itens."
PRO_IN_CODIGO NUMBER(7) - "Cod. Item Codigo do Item Estoque"
PRO_ST_DESCRICAO	VARCHAR2(70) - "Item Descrição do Item"
PRO_ST_ALTERNATIVO VARCHAR2(50) - "Código Alternativo Código Alternativo"
Tabela de Itens =

Selecionar tudo

PRO_TAB_IN_CODIGO NUMBER(3) - "Cód. Tabela Itens Código da tabela Itens."
PRO_PAD_IN_CODIGO NUMBER(3) - "Cód. Padrão Itens Código padrão da tabela Itens."
PRO_IN_CODIGO NUMBER(7) - "Cod. Item Codigo do Item Estoque"
COM_TAB_IN_CODIGO NUMBER(3) - "Cód. Tabela Itens Código da tabela Itens."
COM_PAD_IN_CODIGO NUMBER(3) - "Cód. Padrão Itens Código padrão da tabela Itens."
COM_IN_CODIGO NUMBER(7) - "Cod. Item Codigo do Item Estoque"
COM_RE_SEGQUANTIDADE NUMBER - "Seg.Quantidade Segunda Quantidade A ser usada no Controle de Formulas para Receita de Fabricação"
leandrolinof
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 33
Registrado em: Qua, 17 Fev 2010 6:30 am
Localização: Americana

Chaves primarias-

Selecionar tudo

PRO_TAB_IN_CODIGO NUMBER,
PRO_PAD_IN_CODIGO NUMBER
PRO_IN_CODIGO NUMBER
Chaves Estrangeiras-

Selecionar tudo

COM_TAB_IN_CODIGO NUMBER,
COM_PAD_IN_CODIGO NUMBER,
COM_IN_CODIGO NUMBER
Os campos COM_ da tabela de Itens, tenho de relacionar com os campos PRO da tabela de Produtos, pois os produtos da tabela de Produtos serão compostos por produtos da tabela de Itens.

PRO_ST_DESCRICAO e PRO_ST_ALTERNATIVO serão as informações dos produtos das duas tabelas.
leandrolinof
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 33
Registrado em: Qua, 17 Fev 2010 6:30 am
Localização: Americana

A tabela de REVISAO no momento não é importante.

No sistema vou tentar explicar como funciona:
Existe um cadastro de produtos que são inseridos na tabela de PRODUTOS, até ai tudo bem, é um cadastro normal como qualquer outro sistema. Dentro dessa tela de cadastro existe uma outra tela que se cadastra os produtos que farão parte da composição do produto principal.
Vamos supor que no Produto - CADERNO sua composição seria: CAPA DURA, ARAME, FOLHA.
No produto REVISTA sua composição seria: CAPA MOLE, FOLHA.
No produto AGENDA sua composição seria: CAPA DURA, ARAME, FOLHA.

Estes são os produtos filho CADERNO, REVISTA e AGENDA e os produtos pais seriam CAPA DURA, CAPA MOLE, ARAME e FOLHA

Agora no relatório que preciso mostrar:
Preciso colocar, vamos supor 4 parametros para o usuário pesquisar: prod1 e prod2, qtde1 e qtde2, que seria consultado no campo: COM_RE_SEGQUANTIDADE - "Seg.Quantidade
Segunda Quantidade A ser usada no Controle de Formulas para Receita de Fabricação"
, este se encontra na tabela de ITENS LISTA DE MATERIAIS.
Os parametros Prod1 e 2, serão os produtos PAI da tabela de ITENS LISTA DE MATERIAIS.
O que está acontecendo hj na Select é que ele está trazendo os produtos FILHO da tabela de PRODUTOS que contenha pelo menos um produto PAI da tabela de ITENS LISTA DE MATERIAIS.
O que tem de ser feito hj é: trazer no relatório todos os produtos PAI que contenha os dois produtos FILHO que o usuário digitou nos parametros de pesquisa Prod1 e Qtde1 + Prod2 e Qtde2

Cara acho que agora deu pra entender melhor, senão a gente faz um chat ai pra tentar ver se você entende rsrsrsrsrs
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Blza Leandro?

Demorei um pouco para ler a sua resposta, mas pelo que entendi agora seria isso:

Selecionar tudo

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
Connected as fsitja
 
SQL> 
SQL> create table produto (PRO_TAB_IN_CODIGO NUMBER(3),
  2                        PRO_PAD_IN_CODIGO NUMBER(3),
  3                        PRO_IN_CODIGO NUMBER(7),
  4                        PRO_ST_DESCRICAO VARCHAR2(70),
  5                        PRO_ST_ALTERNATIVO VARCHAR2(50));
 
Table created
SQL> alter table produto add constraint prod_pk primary key (PRO_TAB_IN_CODIGO, PRO_PAD_IN_CODIGO, PRO_IN_CODIGO);
 
Table altered
SQL> begin
  2  insert into produto values (100, 1, 10, 'CADERNO', 'CADERNO ESPIRAL');
  3  insert into produto values (101, 1, 10, 'REVISTA', 'REVISTA VEJA');
  4  insert into produto values (102, 1, 10, 'AGENDA', 'AGENDA HELLO KITTY');
  5  insert into produto values (103, 1, 10, 'CAPA DURA', 'CAPA DURA');
  6  insert into produto values (104, 1, 10, 'ARAME', 'ARAME');
  7  insert into produto values (105, 1, 10, 'CAPA MOLE', 'CAPA MOLE');
  8  insert into produto values (106, 1, 10, 'FOLHA', 'FOLHA');
  9  commit;
 10  end;
 11  /
 
PL/SQL procedure successfully completed
SQL> --
SQL> create table item (PRO_TAB_IN_CODIGO NUMBER(3),
  2                     PRO_PAD_IN_CODIGO NUMBER(3),
  3                     PRO_IN_CODIGO NUMBER(7),
  4                     COM_TAB_IN_CODIGO NUMBER(3),
  5                     COM_PAD_IN_CODIGO NUMBER(3),
  6                     COM_IN_CODIGO NUMBER(7),
  7                     COM_RE_SEGQUANTIDADE NUMBER);
 
Table created
SQL> alter table item add constraint item_pk
  2               primary key (PRO_TAB_IN_CODIGO, PRO_PAD_IN_CODIGO, PRO_IN_CODIGO,
  3                            COM_TAB_IN_CODIGO, COM_PAD_IN_CODIGO, COM_IN_CODIGO);
 
Table altered
SQL> alter table item add constraint item_prod_fk foreign key (
  2                   COM_TAB_IN_CODIGO, COM_PAD_IN_CODIGO, COM_IN_CODIGO)
  3                   references produto (PRO_TAB_IN_CODIGO, PRO_PAD_IN_CODIGO, PRO_IN_CODIGO);
 
Table altered
SQL> alter table item add constraint item_prod_pk_fk foreign key (
  2                   PRO_TAB_IN_CODIGO, PRO_PAD_IN_CODIGO, PRO_IN_CODIGO)
  3                   references produto (PRO_TAB_IN_CODIGO, PRO_PAD_IN_CODIGO, PRO_IN_CODIGO);
 
Table altered
SQL> begin
  2  insert into item values (100, 1, 10, 103, 1, 10, 2); -- CADERNO, CAPA DURA
  3  insert into item values (100, 1, 10, 104, 1, 10, 1); -- CADERNO, ARAME
  4  insert into item values (100, 1, 10, 106, 1, 10, 60); -- CADERNO, FOLHA
  5  insert into item values (101, 1, 10, 105, 1, 10, 2); -- REVISTA, CAPA MOLE
  6  insert into item values (101, 1, 10, 106, 1, 10, 40); -- REVISTA, FOLHA
  7  insert into item values (102, 1, 10, 103, 1, 10, 2); -- AGENDA, CAPA DURA
  8  insert into item values (102, 1, 10, 104, 1, 10, 1); -- AGENDA, ARAME
  9  insert into item values (102, 1, 10, 106, 1, 10, 150); -- AGENDA, FOLHA
 10  commit;
 11  end;
 12  /
 
PL/SQL procedure successfully completed
 
SQL> 
SQL> SELECT p.pro_st_descricao,
  2         p.pro_st_alternativo,
  3         i.com_re_segquantidade,
  4         mat.pro_st_descricao,
  5         mat.pro_st_alternativo
  6    FROM (SELECT prod.pro_tab_in_codigo,
  7                 prod.pro_pad_in_codigo,
  8                 prod.pro_in_codigo,
  9                 prod.pro_st_alternativo,
 10                 prod.pro_st_descricao
 11            FROM produto prod
 12           WHERE EXISTS (SELECT 1
 13                    FROM produto mat2
 14                    JOIN item t2
 15                      ON mat2.pro_tab_in_codigo = t2.com_tab_in_codigo
 16                         AND mat2.pro_pad_in_codigo = t2.com_pad_in_codigo
 17                         AND mat2.pro_in_codigo = t2.com_in_codigo
 18                   WHERE t2.pro_tab_in_codigo = prod.pro_tab_in_codigo
 19                         AND t2.pro_pad_in_codigo = prod.pro_pad_in_codigo
 20                         AND t2.pro_in_codigo = prod.pro_in_codigo
 21                         AND mat2.pro_st_alternativo = 'ARAME' --&prod1
 22                         AND t2.com_re_segquantidade = 1 --&qtde1
 23                  )
 24                 AND EXISTS (SELECT 1
 25                    FROM produto mat3
 26                    JOIN item t3
 27                      ON mat3.pro_tab_in_codigo = t3.com_tab_in_codigo
 28                         AND mat3.pro_pad_in_codigo = t3.com_pad_in_codigo
 29                         AND mat3.pro_in_codigo = t3.com_in_codigo
 30                   WHERE t3.pro_tab_in_codigo = prod.pro_tab_in_codigo
 31                         AND t3.pro_pad_in_codigo = prod.pro_pad_in_codigo
 32                         AND t3.pro_in_codigo = prod.pro_in_codigo
 33                         AND mat3.pro_st_alternativo = 'FOLHA' --&prod2
 34                         AND t3.com_re_segquantidade = 60 --&qtde2
 35                  )) p
 36    JOIN item i
 37      ON p.pro_tab_in_codigo = i.pro_tab_in_codigo
 38         AND p.pro_pad_in_codigo = i.pro_pad_in_codigo
 39         AND p.pro_in_codigo = i.pro_in_codigo
 40    JOIN produto mat
 41      ON mat.pro_tab_in_codigo = i.com_tab_in_codigo
 42         AND mat.pro_pad_in_codigo = i.com_pad_in_codigo
 43         AND mat.pro_in_codigo = i.com_in_codigo;
 
PRO_ST_DESCRICAO PRO_ST_ALTERNATIVO  COM_RE_SEGQUANTIDADE PRO_ST_DESCRICAO PRO_ST_ALTERNATIVO
---------------- ------------------- -------------------- ---------------- ------------------
CADERNO          CADERNO ESPIRAL                        2 CAPA DURA        CAPA DURA
CADERNO          CADERNO ESPIRAL                        1 ARAME            ARAME
CADERNO          CADERNO ESPIRAL                       60 FOLHA            FOLHA
É como o Dr Gori falou, só que a tabela de composição tem duas FKs para produto, correto? Por isso estava um pouco difícil de entender no início o que estava acontecendo.

Dá um validada e deixa o feedback depois.

Falou,
Francisco.
leandrolinof
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 33
Registrado em: Qua, 17 Fev 2010 6:30 am
Localização: Americana

Blza fsitja

Cara testei a select aqui ele trouxe os produtos que contenham os itens dentro, so que ainda está vindo produtos que contenham mais itens dentro fora os da pesquisa.

O que eu tenho que trazer seria so mesmo os produtos cujo itens foram pesquisados...
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

O SQL que postei só exibe o produto caderno, e mais nenhum. Há algo errado ali?

Senão, provavelmente deu algum problema quando você adaptou o código para suas tabelas. De repente se você postar o que foi executado fica possível ajudar.
leandrolinof
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 33
Registrado em: Qua, 17 Fev 2010 6:30 am
Localização: Americana

Segue a Select:

Selecionar tudo

SELECT distinct p.pro_st_alternativo,
            p.pro_st_descricao,  
            i.com_re_segquantidade, 
            mat.pro_st_descricao, 
            mat.pro_st_alternativo 
FROM (SELECT prod.pro_tab_in_codigo, 
           prod.pro_pad_in_codigo, 
           prod.pro_in_codigo, 
           prod.pro_st_alternativo, 
           prod.pro_st_descricao 
           FROM mgadm.est_produtos prod 
           WHERE EXISTS (SELECT 1 
                                  FROM mgadm.est_produtos mat2 
                                  JOIN mgadm.est_itenslistamateriais t2 
                                  ON mat2.pro_tab_in_codigo = t2.com_tab_in_codigo 
                                  AND mat2.pro_pad_in_codigo = t2.com_pad_in_codigo 
                                  AND mat2.pro_in_codigo = t2.com_in_codigo 
                                  WHERE t2.pro_tab_in_codigo = prod.pro_tab_in_codigo 
                                  AND t2.pro_pad_in_codigo = prod.pro_pad_in_codigo 
                                 AND t2.pro_in_codigo = prod.pro_in_codigo 
                                 AND mat2.pro_st_alternativo = /*'ARAME'*/ &prod1 
                                 AND t2.com_re_segquantidade = /*1*/ &qtde1 
                 ) 
             AND EXISTS (SELECT 1 
                                 FROM mgadm.est_produtos mat3 
                                 JOIN mgadm.est_itenslistamateriais t3 
                                 ON mat3.pro_tab_in_codigo = t3.com_tab_in_codigo 
                                 AND mat3.pro_pad_in_codigo = t3.com_pad_in_codigo 
                                 AND mat3.pro_in_codigo = t3.com_in_codigo 
                                 WHERE t3.pro_tab_in_codigo = prod.pro_tab_in_codigo 
                                 AND t3.pro_pad_in_codigo = prod.pro_pad_in_codigo 
                                 AND t3.pro_in_codigo = prod.pro_in_codigo 
                                 AND mat3.pro_st_alternativo = /*'FOLHA'*/ &prod2 
                                AND t3.com_re_segquantidade = /*60*/ &qtde2 
                                )) p 
JOIN mgadm.est_itenslistamateriais i 
ON p.pro_tab_in_codigo = i.pro_tab_in_codigo 
AND p.pro_pad_in_codigo = i.pro_pad_in_codigo 
AND p.pro_in_codigo = i.pro_in_codigo 
JOIN mgadm.est_produtos mat 
ON mat.pro_tab_in_codigo = i.com_tab_in_codigo 
AND mat.pro_pad_in_codigo = i.com_pad_in_codigo 
AND mat.pro_in_codigo = i.com_in_codigo;
leandrolinof
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 33
Registrado em: Qua, 17 Fev 2010 6:30 am
Localização: Americana

fsitja,

Consegui trazer os produtos...

Só que fui adicionar mais EXISTS dentro da SELECT pra trazer mais produtos e não trouxe...

Por exemplo...

Fiz mais dois EXISTS pra trazer um produto com 4 itens dentro dele com 4 qtde e não trouxe nada...

Essa select é pra trazer somente dois mesmo ou traz mais que dois produtos?
leandrolinof
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 33
Registrado em: Qua, 17 Fev 2010 6:30 am
Localização: Americana

Cara desculpa funcionou...

Erro meu, tinha anotado cod do prod errado :)

Deu certo cara muito obrigado mesmo pela ajuda....
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Opa, está blza, foi mal tb por não ter lido a mensagem, mas estou de férias e sabe como é 8)
leandrolinof
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 33
Registrado em: Qua, 17 Fev 2010 6:30 am
Localização: Americana

hehe

blza esquenta não....
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 11 visitantes