●概要●
構文 WHERE 式 IN (リスト)
WHERE 式 NOT IN (リスト)
IN演算子は、かっこ内のリストのいずれかと一致するレコードを検索します。
たとえば、フィールド1に対してIN演算子のリストに('A','B','C')と指定した場合、「フィールド1='A' OR フィールド1='B' OR フィールド1='C'」のように3つの条件をOR演算子で指定したのと同じになります。
一方、NOT IN演算子はかっこ内のリストのすべてと一致しないレコードを検索し、ます。NOT IN演算子のリストに('A','B','C')と指定した場合、「フィールド1<>'A' AND フィールド1<>'B' AND フィールド1<>'C'」のように3つの条件をAND演算子で指定したのと同じになります。
サンプルでは、リストに「社員コード」を指定し、IN演算子を使用してリストのいずれかと一致するコードを、またNOT IN演算子を使用してリストのすべてと一致しないレコードを検索します。
●サンプル●
'複数の条件に一致するレコードを抽出する
Public Sub Sample()
Dim myDB As Database
Dim myRS As DAO.Recordset
Dim mySQL1, mySQL2 As String
'SQLステートメントを定義する
mySQL1 = "SELECT * FROM 社員テーブル " & _
"WHERE 社員コード IN (10001,10002,20001,20002);"
mySQL2 = "SELECT * FROM 社員テーブル " & _
"WHERE 社員コード NOT IN (10001,10002,20001,20002);"
'カレントデータベースを変数に代入する
Set myDB = CurrentDb
'SQLステートメントを実行してレコードセットを開く
Set myRS = myDB.OpenRecordset(mySQL1, dbOpenDynaset)
'レコードセットの内容を表示する
Debug.Print "*** IN 検索 ***"
Do Until myRS.EOF
Debug.Print myRS!社員コード & " " & myRS!部署コード & " " _
& myRS!名前 & " " & myRS!入社年月日 & " " & myRS!職種
myRS.MoveNext
Loop
'SQLステートメントを実行してレコードセットを開く
Set myRS = myDB.OpenRecordset(mySQL2, dbOpenDynaset)
'レコードセットの内容を表示する
Debug.Print "*** NOT IN 検索 ***"
Do Until myRS.EOF
Debug.Print myRS!社員コード & " " & myRS!部署コード & " " _
& myRS!名前 & " " & myRS!入社年月日 & " " & myRS!職種
myRS.MoveNext
Loop
'レコードセットを閉じる
myRS.Close
End Sub
●補足●
抽出結果は[イミディエイト]ウィンドウに表示されます。