我在构建这个SQL查询时需要一些帮助。 这是我的测试用户表。它通过连接到部门表 的 DEPTID
情况就是这样,用户会请求某些内容并且需要另一个审批用户的批准,该审核用户存储在身份验证表中。 请求将存储在请求表中,状态为未批准,直到批准用户批准为止。 我需要做的是创建一个SQL查询来查找请求表中具有已批准状态的所有请求,并从身份验证表
中过滤掉例如,如果我要输入Rose的 UserID ,我将会看到请求肥皂和笔因为她是在身份验证表中的维护和执行部门中分配的。此外,如果我要输入Jennifer的 UserID ,那么我只会看到请求 Candy ,因为她是在身份验证的指导部门中分配的表
我只能通过请求状态已批准来过滤请求,但在与身份验证表连接后却无法过滤。
SELECT u.ReqID, u.ReqName, d.dept_name,u.ReqStatus
FROM Request u,Department d
where u.DeptID = d.DeptID AND u.ReqStatus = 'Approved'
这是SQL Fiddle链接:SQL Fiddle
感谢。
这是我的部门表
这是我的请求表
这是我的身份验证表
答案 0 :(得分:0)
首先,使用JOIN。它们更有效率。
如果你想要这个字段
u.ReqID, u.ReqName, d.dept_name,u.ReqStatus
使用此查询
SELECT u.ReqID, u.ReqName, d.dept_name,u.ReqStatus
FROM Request u INNER JOIN Department d ON u.DeptID = d.DeptID
WHERE u.ReqStatus Like 'Approved'
如果您希望用户名使用此查询。
SELECT u.ReqID, u.ReqName, d.dept_name,u.ReqStatus, a.UserID, us.name
FROM Request u INNER JOIN Department d ON u.DeptID = d.DeptID
INNER JOIN Auth a ON u.DeptID = a.DeptID INNER JOIN Users us
ON a.UserID = us.UserID
WHERE u.ReqStatus Like 'Approved'
抱歉,我忘了,如果您想要特定用户,请使用此查询:
SELECT u.ReqID, u.ReqName, d.dept_name,u.ReqStatus, a.UserID, us.name
FROM Request u INNER JOIN Department d ON u.DeptID = d.DeptID
INNER JOIN Auth a ON u.DeptID = a.DeptID INNER JOIN Users us
ON a.UserID = us.UserID
WHERE u.ReqStatus Like 'Approved' AND a.UserID = 2