Ir para conteúdo

Arquivado

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

cintiadel

[Resolvido] Subconsulta not in com duas colunas

Recommended Posts

Quero saber se eu consigo usando o not in comparar mais de um campo, no exemplo abaixo eu seleciono na tabela1 tudo aquilo que não contém na tabela2. Mas eu preciso comparar 4 campos, porque o codigo ele pode repetir, o que não pode é um conjunto de campos.

 

select * from tabela1
where codigo not in (select codigo from tabela2)

como faço isso? na verdade seria uma comparação de varios campos, e uma listagem do que não está naquela tabela

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta síntaxe depende do BD ...

 

select *
from tabela
where (campo1,campo2,...) in
(select campo1,campo2,...
 from tabela2
 where ....)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz da seguinte forma:

 

select tb1.campo1, tb1.campo2, tb1.campo3, tb1.campo4, tb1.campo5 from tabela1 as tb1
where (tb1.campo1, tb1.campo2, tb1.campo3, tb1.campo4
in(select tb2.campo1, tb2.campo2, tb2.campo3, tb2.campo from tabela2 as tb2)

mas deu erro: Mensagem 170, Nível 15, Estado 1, Linha 4

Line 4: Incorrect syntax near ','.

 

tbm fiz com o and e subconsulta e nao consegui, não exibe nenhum resultado, deve ter algo errado na consulta, pq tem dados que atendem ao que eu quero fazer.

select tb1.campo1, tb1.campo2, tb1.campo3, tb1.campo4, tb1.campo5 from tabela1 as tb1
where tb1.campo1 not in (select  tb2.campo1 from tabela2 as tb2)
and  tb1.campo2 not in (select  tb2.campo2 from tabela2 as tb2)
and tb1.campo3 not in (select  tb2.campo3 from tabela2 as tb2)
and  tb1.campo4 not in (select  tb2.campo4 from tabela2 as tb2)

Compartilhar este post


Link para o post
Compartilhar em outros sites

select tb1.campo1, tb1.campo2, tb1.campo3, tb1.campo4, tb1.campo5 from tabela1 as tb1
where (tb1.campo1, tb1.campo2, tb1.campo3, tb1.campo4 [b][u])[/u][/b]
in(select tb2.campo1, tb2.campo2, tb2.campo3, tb2.campo from tabela2 as tb2)

 

Faltou um parentesis , creio ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

select tb1.campo1, tb1.campo2, tb1.campo3, tb1.campo4, tb1.campo5 from tabela1 as tb1

where (tb1.campo1, tb1.campo2, tb1.campo3, tb1.campo4 )

not in(select tb2.campo1, tb2.campo2, tb2.campo3, tb2.campo from tabela2 as tb2)

 

Faltou um parentesis , creio ....

 

 

na hora de postar faltou, mas aqui tah certo

e mais uma coisa é not in coloquei errado no post

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então o BD em questão não suporta a síntaxe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT * FROM TABELA1

WHERE CAMPO1 IN

(SELECT CAMPO1 FROM TABELA2

WHERE CAMPO2 NOT IN

(SELECT CAMPO2 FROM TABELA3))

 

pode trocar os IN e NOT IN

 

deu certo??

 

 

quase, ainda n trouxe as informações que eu preciso.

por exemplo o professor x, com materia x, curso x, turma x preencheu um cadastro, quero listar somente as materias, cursos, e turmas que ele nao preencheu o cadastro, na verdade tem q comparar todos os campos juntos que nao esteja nessa tabela.

algo usando and

espero q me entenda

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma idéia é concatenar os campos:

select * from tabela
where convert(varchar, campo1) + convert(varchar, campo2) 
           not in (select convert(varchar, campo1) + convert(varchar, campo2) from tabela2)

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma idéia é concatenar os campos:

select * from tabela
where convert(varchar, campo1) + convert(varchar, campo2) 
           not in (select convert(varchar, campo1) + convert(varchar, campo2) from tabela2)

 

 

parece que agora deu certo

valeu

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.