values operador not multiple español ejemplos sql-server sql-server-2008 select in-clause

operador - SQL Server-cláusula IN con múltiples campos



select sql server in (8)

¿Qué tal esto en su lugar?

SELECT user.* FROM user JOIN userType on user.code = userType.code AND user.userType = userType.userType

¿Es posible incluir en una cláusula IN múltiples campos? Algo como lo siguiente:

select * from user where code, userType in ( select code, userType from userType )

Estoy usando ms sql server 2008

Sé que esto se puede lograr con uniones y existe, solo quería saber si podría hacerse con la cláusula IN .


No creo que la consulta sea bastante portátil, sería más seguro usar algo como

select * from user where code in ( select code from userType ) and userType in (select userType from userType)


No de la manera que has publicado. Solo puede devolver un solo campo o tipo para que IN funcione.

Desde MSDN ( IN ):

test_expression [ NOT ] IN ( subquery | expression [ ,...n ] ) subquery - Is a subquery that has a result set of one column. This column must have the same data type as test_expression. expression[ ,... n ] - Is a list of expressions to test for a match. All expressions must be of the same type as test_expression.

En lugar de IN , puedes usar un JOIN usando los dos campos:

SELECT U.* FROM user U INNER JOIN userType UT ON U.code = UT.code AND U.userType = UT.userType


Podrías usar un formulario como este:

select * from user u where exists (select 1 from userType ut where u.code = ut.code and u.userType = ut.userType)


Puedes usar uniones

SELECT * FROM user U INNER JOIN userType UT on U.code = UT.code AND U.userType = UT.userType


Solo con algo horrible, como

select * from user where (code + userType) in ( select code + userType from userType )

Luego tienes que administrar los nulos y los números de concatenación en lugar de agregarlos, y lanzar, y un código de 12 y un tipo de usuario de 3 frente a un código de 1 y un tipo de usuario de 23, y ...

Así que ya está: una solución que no usa uniones o existe ... y un montón de razones por las que no debería usarla;)


Tenía que hacer algo muy similar, pero EXISTS no funcionaba en mi situación. Esto es lo que funcionó para mí:

UPDATE tempFinalTbl SET BillStatus = ''Non-Compliant'' WHERE ENTCustomerNo IN ( SELECT DISTINCT CustNmbr FROM tempDetailTbl dtl WHERE dtl.[Billing Status] = ''NEEDS FURTHER REVIEW'' AND dtl.CustNmbr = ENTCustomerNo AND dtl.[Service] = [Service]) AND [Service] IN ( SELECT DISTINCT [Service] FROM tempDetailTbl dtl WHERE dtl.[Billing Status] = ''NEEDS FURTHER REVIEW'' AND dtl.CustNmbr = ENTCustomerNo AND dtl.[Service] = [Service])

EDIT: Ahora que lo veo, esto está muy cerca de la respuesta de @ v1v3kn


select * from user where (code, userType) in ( select code, userType from userType );