none
Duvida com NOT IN e INNER JOIN RRS feed

  • Pergunta

  • Bom dia ! Galera é o seguinte :

    Possuo 3 tabelas irei chamar de tabela tblQuestao, tblUnidade, tblQuestaoUnidade ok.

    Na minha tabela tblQuestao tenho IdQuestao como PK , na tblUnidade IdUnidade como PK, agora na minha tabela tblQuestaoUnidade tenho cada Id dessas tabelas como FK.

    Preciso fazer um SELECT que selecione somente os IdQuestao que não contenha cadastrado no IdUnidade. Se não fui claro perguntem que eu tento esclarecer melhor. tentei algo como :

    SELECT tblQuestao.IdQuestao FROM tblQuestao

    INNER JOIN tblUnidade ON tblQuestao.IdQuestao NOT IN (tblUnidade.IdQuestao)

    WHERE tblUnidade.IdUnidade = qualquer valor na unidade.....

    Só que ele lista todos os campos repetidos se alguém puder ajudar fico grato.

    terça-feira, 27 de novembro de 2012 12:23

Respostas

  • Tente assim

    SELECT tblQuestao.IdQuestao 
    FROM tblQuestao 
    where tblQuestao.IdQuestao not in (select IdQuestao from tblUnidade where unidade =  qualquer valor na unidade)


    [ ]´s,
    Lukas Baldan

    • Marcado como Resposta Daniel Brito br terça-feira, 27 de novembro de 2012 12:49
    terça-feira, 27 de novembro de 2012 12:40
  • Bom dia Daniel,

    Acredito que o NOT EXISTS seja mais adequado no seu caso e até mesmo mais performático. Nada impede portando de vc usar o NOT IN...

    SELECT 
    	tblQuestao.IdQuestao 
    FROM tblQuestao
    WHERE NOT EXISTS (SELECT NULL FROM TblUnidade
    	WHERE tblQuestao.IdQuestao = tblUnidade.IdQuestao
    	AND tblUnidade.IdUnidade = qualquer valor na unidade.....)
    
    --Ou
    
    SELECT 
    	tblQuestao.IdQuestao 
    FROM tblQuestao
    WHERE tblQuestao.IdQuestao NOT IN (SELECT tblQuestao.IdQuestao FROM TblUnidade
    	WHERE tblQuestao.IdQuestao = tblUnidade.IdQuestao
    	AND tblUnidade.IdUnidade = qualquer valor na unidade.....)

    At.
    Rafael


    • Editado Rafael S. Melo terça-feira, 27 de novembro de 2012 12:46 Posição do where
    • Marcado como Resposta Daniel Brito br terça-feira, 27 de novembro de 2012 12:49
    terça-feira, 27 de novembro de 2012 12:41

Todas as Respostas

  • Tente assim

    SELECT tblQuestao.IdQuestao 
    FROM tblQuestao 
    where tblQuestao.IdQuestao not in (select IdQuestao from tblUnidade where unidade =  qualquer valor na unidade)


    [ ]´s,
    Lukas Baldan

    • Marcado como Resposta Daniel Brito br terça-feira, 27 de novembro de 2012 12:49
    terça-feira, 27 de novembro de 2012 12:40
  • Bom dia Daniel,

    Acredito que o NOT EXISTS seja mais adequado no seu caso e até mesmo mais performático. Nada impede portando de vc usar o NOT IN...

    SELECT 
    	tblQuestao.IdQuestao 
    FROM tblQuestao
    WHERE NOT EXISTS (SELECT NULL FROM TblUnidade
    	WHERE tblQuestao.IdQuestao = tblUnidade.IdQuestao
    	AND tblUnidade.IdUnidade = qualquer valor na unidade.....)
    
    --Ou
    
    SELECT 
    	tblQuestao.IdQuestao 
    FROM tblQuestao
    WHERE tblQuestao.IdQuestao NOT IN (SELECT tblQuestao.IdQuestao FROM TblUnidade
    	WHERE tblQuestao.IdQuestao = tblUnidade.IdQuestao
    	AND tblUnidade.IdUnidade = qualquer valor na unidade.....)

    At.
    Rafael


    • Editado Rafael S. Melo terça-feira, 27 de novembro de 2012 12:46 Posição do where
    • Marcado como Resposta Daniel Brito br terça-feira, 27 de novembro de 2012 12:49
    terça-feira, 27 de novembro de 2012 12:41
  • Daniel,

    Teta da seuinte maneira:

    SELECT 
    tblQuestao.IdQuestao
    
    FROM tblQuestao
    Left Outer Join tblUnidade ON tblQuestao.IdQuestao = tblUnidade.IdQuestao
    
    WHERE 
    tblQuestao.IdQuestao not in (Select IdQuestao from tblUnidade )


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    terça-feira, 27 de novembro de 2012 12:49
  • Funcionou dos dois modos. Brigado galera.
    terça-feira, 27 de novembro de 2012 12:50