まず、これは私が作成しておらず、変更できない DB セットアップ (Access 2010) です。
違反:
パッケージ:
指定された Role1 と Role2 がレコードに一致するときに WorkPackageCodes を選択したいと考えています。たとえば、Role1 が 3 で Role 2 が 8 の場合、ID が 3 と 8 の WorkPackageCode が必要です。たとえば、Role1 が 4 で Role2 が 6 の場合、何も選択しないでください。
複数のクエリでこれを行うことができましたが、これを 1 つのクエリ (サブクエリあり/なし) で実行したいと考えています。そのため、IN で WorkPackageID が他のテーブルの結果セットに含まれているかどうかを確認できるものが必要です。私はこれを試しました:
//3 and 6 will be replaced by parameters
SELECT Role1 AS role FROM tblSODViolations
UNION
SELECT Role2 FROM tblSODViolations
WHERE Role1 = 3 AND Role2 = 6
これにより、目的の結果が得られ、次のように 1 つのクエリを作成しようとしました。
SELECT WorkPackageCode
FROM tblWorkPackages
WHERE WorkPackageID IN (SELECT Role1 AS r FROM tblSODViolations
UNION ALL
SELECT Role2 FROM tblSODViolations
WHERE Role1 = 3 AND Role2 = 6);
しかし、これを実行すると、次のメッセージが表示されます。
この操作はサブクエリでは許可されていません。
では、どうすればこれを達成できますか?または、ある種の SQL if ステートメントで WorkPackageCode を選択する方法はありますか? 前もって感謝します!