Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 2
            [id] => 544035
            [titulo] => CLAUSULA IN COM VARIOS VALORES
            [dataCadastro] => DateTime Object
                (
                    [date] => 2016-01-29 12:45:01
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 418027
            [status] => A
            [isExample] => 
            [NomeUsuario] => Jothaz
            [Apelido] => 
            [Foto] => 418027_20150313165406.jpg
            [Conteudo] => Qual o tipo do campo COD_MATRICULA? 

Se form VARCHAR() use:

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

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

CLAUSULA IN COM VARIOS VALORES

Lucas Tiago
   - 29 jan 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.

Post mais votado

Jothaz
   - 29 jan 2016

Qual o tipo do campo COD_MATRICULA?

Se form VARCHAR() use:

#Código

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.

João Viana
   - 29 jan 2016

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)

Lucas Tiago
   - 29 jan 2016

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'

João Viana
   - 29 jan 2016

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:

#Código

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

Lucas Tiago
   - 29 jan 2016

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.

Jothaz
   - 29 jan 2016

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

O IN deveria funcionar!

Post a estrutura da tabela.

#Código

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)


Clique na imagem para abrir em uma nova janela

Lucas Tiago
   - 29 jan 2016

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