CLAUSULA IN COM VARIOS VALORES

29/01/2016

Bom dia pessoal,

sou novo aqui no fórum e tenho uma dúvida,

preciso executar um select que traga a seguinte informação,

NOME, EMAIL, CÓD_MATRICULA de todos os alunos da tabela matricula, cujo cód já tenho em mãos.

Exemplo:

SELECT NOME, E-MAIL, CÓD_MATRICULA FROM TB_MATRICULA WHERE COD_MATRICULA = '20', '30', '51', '40'

eu preciso que os valores sejam exatamente iguais a 20, 30, 51 e 40,

da forma que eu fiz em cima o SQL SERVER da erro de sintaxe,

tentei usar a clausula IN porém essa clausula não traz os valores idênticos no qual eu preciso.

Alguem ai consegue me dar uma ajuda ?

Estou utilizando o SQL SERVER 2008

Qualquer ajuda fico agradecido.

Lucas Tiago

Melhor resposta

29/01/2016

Qual o tipo do campo COD_MATRICULA?

Se form VARCHAR() use:

SELECT NOME, E-MAIL, CÓD_MATRICULA FROM TB_MATRICULA WHERE COD_MATRICULA IN ('20', '30','51','40')


A resposta do João Viana esta correta é só acertar para o tipo de campo.

Jothaz

Responder Citar

Outras Respostas

29/01/2016

João Viana

Bom dia Lucas
a sintaxe correta é esta:

SELECT NOME, E-MAIL, CÓD_MATRICULA FROM TB_MATRICULA WHERE COD_MATRICULA IN (20, 30,51,40)
Responder Citar

29/01/2016

Lucas Tiago

Bom dia João,

eu tentei dessa forma mas o SQL esta me trazendo um registro a mais na consulta,

eu preciso que sejam valores exatamente iguais,

aparentemente quando eu utilizo a clausula IN o sql esta pegando outro código que contenha os mesmos números que eu mencionei,

porém não é isso que eu preciso, eu quero que ele me traga os valores exatamente iguais assim como a clausula WHERE COD_MATRICULA = '10'
Responder Citar

29/01/2016

João Viana

Lucas,
Nunca vi situações assim.
O campo cod_matricula é chave primária?

Se a clausula IN não está dando certo você pode tentar essas:

SELECT nome, e-mail, cod_matricula 
	FROM tb_matricula 
WHERE ((cod_matricula = 20) OR
		(cod_matricula = 30) OR
		(cod_matricula = 51) OR 
		(cod_matricula = 40))
		
	
SELECT nome, e-mail, cod_matricula 
	FROM tb_matricula 
WHERE cod_matricula = 20
UNION
SELECT nome, e-mail, cod_matricula 
	FROM tb_matricula 
WHERE cod_matricula = 30
UNION
SELECT nome, e-mail, cod_matricula 
	FROM tb_matricula 
WHERE cod_matricula = 51
UNION
SELECT nome, e-mail, cod_matricula 
	FROM tb_matricula 
WHERE cod_matricula = 40
Responder Citar

29/01/2016

Lucas Tiago

Sim joão o COD_MATIRCULA é chave primária

através da primeira forma que você mandou deu certo, porém o código fica muito extenso, pois quanto mais código de matricula eu tiver mais vezes eu tenho que ficar digitando o nome do campo e a clausula or

sabe me dizer se tem alguma forma mais simples de se fazer isso?, assim como o IN, só que pra mim o IN não serve pois eu estou declarando 4 itens e o sql esta me retornando um a mais.
Responder Citar

29/01/2016

Jothaz

Fiz um teste aqui e funciona, no caos o campo COD_MATRICULA é do tipo int.

O IN deveria funcionar!

Post a estrutura da tabela.

declare @tab as table(COD_MATRICULA int)

insert into @tab ( COD_MATRICULA) values (40)
insert into @tab ( COD_MATRICULA) values (500)
insert into @tab ( COD_MATRICULA) values (20)
insert into @tab ( COD_MATRICULA) values (1)
insert into @tab ( COD_MATRICULA) values (51)
insert into @tab ( COD_MATRICULA) values (100)
insert into @tab ( COD_MATRICULA) values (30)

SELECT * FROM @tab WHERE COD_MATRICULA IN (20, 30, 51,40)


[img]http://arquivo.devmedia.com.br/forum/imagem/418027-20160129-125851.png[/img]
Responder Citar

29/01/2016

Lucas Tiago

João, Desculpe o campo é chave estrangeira e do tipo INT

na verdade havia uma duplicidade de valores ou seja na consulta apareceu 2 vezes o mesmo aluno, pois ele possui somente um código, e acabei não me atentando a isso.

agora deu certo,

Obrigado a todos pela ajuda João e Jothaz,

vlw
Responder Citar