IN
句に複数のフィールドを含めることはできますか?次のようなもの:
select * from user
where code, userType in ( select code, userType from userType )
私はMS SQL Server 2008を使用しています
これは結合で実現でき、存在することを知っています。IN
句で実行できるかどうかを知りたかっただけです。
あなたが投稿した方法ではありません。 IN
が機能するには、単一のフィールドまたはタイプのみを返すことができます。
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.
IN
の代わりに、2つのフィールドを使用してJOIN
を使用できます。
SELECT U.*
FROM user U
INNER JOIN userType UT
ON U.code = UT.code
AND U.userType = UT.userType
次のようなフォームを使用できます。
select * from user u
where exists (select 1 from userType ut
where u.code = ut.code
and u.userType = ut.userType)
恐ろしいものだけで
select * from user
where (code + userType) in ( select code + userType from userType )
次に、nullを追加してキャストするのではなく、nullと連結番号を管理し、コード12とユーザータイプ3とコード1とユーザータイプ23を比較する必要があります。
だから行くよ:結合を使用しない、または存在しないソリューション、そしてそれを使用してはいけない理由がたくさんあります;)
結合を使用できます
SELECT * FROM user U
INNER JOIN userType UT on U.code = UT.code
AND U.userType = UT.userType
代わりにこれはどうですか:
SELECT user.* FROM user JOIN userType on user.code = userType.code AND user.userType = userType.userType
私は似たようなことをしなければなりませんでしたが、EXISTSは私の状況では機能しませんでした。これが私のために働いたものです:
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])
編集:今私が見ると、これは@ v1v3knの答えに非常に近いです