注文システムがあります。のユーザーは、異なるユーザーのタイプとして異なる注文に添付できます。注文に関連するドキュメントをダウンロードできます。ドキュメントは、注文の特定のタイプのユーザーにのみ提供されます。ドキュメントを表示するユーザーの権限を確認し、ドキュメントに関する情報を選択するためのクエリを作成するのに問題があります。
次のテーブルと(該当する)フィールドがあります。
Docs: DocNo, FileNo
DocAccess: DocNo, UserTypeWithAccess
FileUsers: FileNo, UserType, UserNo
私は次のクエリを持っています:
SELECT Docs.*
FROM Docs
WHERE DocNo = 1000
AND EXISTS (
SELECT * FROM DocAccess
LEFT JOIN FileUsers
ON FileUsers.UserType = DocAccess.UserTypeWithAccess
AND FileUsers.FileNo = Docs.FileNo /* Errors here */
WHERE DocAccess.UserNo = 2000 )
問題は、Exists Selectで、Docs(Docs.FileNo)を有効なテーブルとして認識しないことです。2番目のon引数をwhere句に移動すると、それは機能しますが、事後にフィルターで除外するのではなく、最初の結合を制限したいと思います。
私はこれをいくつかの方法で回避することができますが、これが最善のようです。ここで足りないものはありますか?それとも単に許可されていないのですか?