我有一个订单系统。用户可以作为不同用户的一种类型附加到不同的订单。他们可以下载与订单相关的文档。文档仅提供给订单上的某些类型的用户。我在编写查询以检查用户查看文档的权限并选择有关文档的信息时遇到问题。
我有以下表格和(适用的)字段:
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)识别为有效表。如果我将第二个 on 参数移到 where 子句,它会起作用,但我宁愿限制初始连接,而不是事后将它们过滤掉。
我可以通过几种方式解决这个问题,但这似乎是最好的。我在这里缺少什么吗?还是根本不允许?