none
relacionar campos e verificar se existe RRS feed

  • Pergunta

  • Boa tarde,

    Até o titulo foi complicado colocar..rs..rs..

    Seguinte, tenho a seguinte estrutura.
    tabela setor (SetorID Nome...)
    tabela atributo (AtributoSetorID,SetorID, nome...)
    tabela movimento (AtributoID...)

    O que eu tenho que fazer...
    Verificar se todos os setores possuem registro relacionado na tabela movimento.

    Espero que tenha cito claro.

    Desde já agradeço.

    quarta-feira, 29 de janeiro de 2014 17:21

Respostas

Todas as Respostas

  • Boa tarde Fábio,

    Tenta esse script ele vai retornar todos os setores sem movimento:

    select tb1.SetorID, tb1.Nome
    from tabela_setor tb1 inner join tabela_atributo tb2
    on tb1.SetorID = tb2.SetorID
    left join tabela_movimento tb3
    on tb2.AtributoSetorID = tb3.AtributoSetorID
    where tb3.AtributoSetorID is null

    Abs

    quarta-feira, 29 de janeiro de 2014 17:31
  • Fabio,

    Veja se a consulta abaixo ajuda:

    SELECT MOV.* FROM MOVIMENTO AS MOV
    LEFT JOIN ATRIBUTO AS ATR
    ON MOV.ATRIBUTOID = ATR.ATRIBUTOID 
    WHERE EXISTS(
       SELECT 1 FROM SETOR AS SET WHERE SET.SETORID = ATR.SETORID
    )

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    quarta-feira, 29 de janeiro de 2014 17:32
    Moderador
  • Fábio,

    Sugiro primeiro, executar este comando para validar se o relacionamento entre as tabelas existe.

    -- Obtendo informações de quais tabelas fazem referência à movimento 
    SQL> select
    2 r.owner,
    3 r.table_name,
    4 r.constraint_name
    5 from
    6 user_constraints r,
    7 user_constraints o
    8 where
    9 r.r_owner = o.owner and
    10 r.r_constraint_name = o.constraint_name and
    11 o.constraint_type in ('P','U') and
    12 r.constraint_type = 'R' and
    13 o.table_name = 'movimento ';

    Segundo, faça um inner para colocar todas em relacionamento e retornarem a quantidade de registros. Caso esteja diferente, altere o comando para OuterJoin e veja os registros que estão sem relacionamento

    Select count(*) from tabela setor  inner join tabela atributo  on tabela setor.chave = tabela atributo.chave

    inner join tabela movimento.chave = tabela atributo.chave // caso a chave seja da tb setor, utilize


    Boa sorte,

    AT_+

    quarta-feira, 29 de janeiro de 2014 17:32
  • Deleted
    quarta-feira, 29 de janeiro de 2014 17:40
  • Obrigado pela ajuda pessoal.

    Deixa eu colocar novos fatos.

    Vários Setores, devo colocar uma condição clienteid = X
    Vários Movimentos, devo colocar uma codição notaid = x

    Portanto pode existir um setor cadastrado para um movimento e um outro setor não, a resposta que eu preciso deve ser "sim" ou "não", sim existem setores que não possuem movimento, não, todos os setores estão representados no movimento.

    Acho que é isso.


    quarta-feira, 29 de janeiro de 2014 18:29
  • Deleted
    quarta-feira, 29 de janeiro de 2014 18:38
  • Olá José Diz,

    Sim.

    Setor
    SetorID   Cliente
      1              60
      2              60

    Atributo
    AtributoID SetorID 
       300                 1
       301                 2

    Movimento
    NOTAID AtributoID
    NOTA 1      300
    NOTA 1      301

    Neste caso estaria ok. todos os setores teriam movimento

    Melhorou?

    quarta-feira, 29 de janeiro de 2014 18:54
  • Deleted
    quarta-feira, 29 de janeiro de 2014 20:36
  • Boa tarde! Fábio,

    Podemos fazer usando o LEFT JOIN da seguinte forma:

    SELECT S.SetorID, S.Nome FROM Setor AS S 
    INNER JOIN Atributo AS A ON S.SetorID = A.SetorID 
    LEFT JOIN Movimento AS M ON A.AtributoSetorID = M.AtributoID


    Ou se preferir use EXISTS da seguinte forma:

    SELECT S.SetorID, S.Nome FROM Setor AS S 
    INNER JOIN Atributo AS A ON S.SetorID = A.SetorID 
    WHERE EXISTS(SELECT * FROM Movimento AS M WHERE A.AtributoSetorID = M.AtributoID)

    Espero ter contribuído para o seu sucesso, favor não esquecer de marcar o post, obrigado.


    quarta-feira, 29 de janeiro de 2014 20:50