2

我在为我的应用程序编写 SQL 查询时遇到了困难。下面显示了我数据库中一些表的屏幕截图。

在此处输入图像描述 在此处输入图像描述

请让我解释一下我的应用程序的一部分是如何工作的,然后我可以向您展示我在使用 SQL 查询时遇到的问题。

用户可以在我的系统上创建申请表 ( dbo.Form)。一份申请表由几个部分组成,其中一个部分是就业历史 ( dbo.FormEmployment)。就业记录包括雇主姓名、开始日期等详细信息,还包括等级 ID。用户可以将一个或多个就业记录添加到表中dbo.FormEmployment

系统管理员可以将班次 ( dbo.Shift) 添加到系统,然后将成绩分配给班次。这些等级记录在dbo.ShiftGrade表中。一个班次可以分配 1 个或多个等级,即可以分配 1、2、3、4 或 5 个等级。

当系统管理员添加了班次和班次成绩后,我想执行 SQL 查询以返回其成绩与分配给班次的成绩相匹配的用户列表(请记住,用户在添加就业记录时会添加他们的成绩)。

我编写了以下有效的 SQL 查询,但是,此查询的问题是它返回一个用户列表,这些用户的任何等级都与分配给班次的等级相匹配。

SELECT   u.userID, u.userTypeID, u.firstName, u.lastName, u.email, u.password, 
u.contactNumber, u.organisationID, u.emailVerificationCode, u.mobileVerificationCode, 
u.userStatusID, u.AddedBy, u.AddedDate, u.ModifiedBy, u.ModifiedDate
FROM     [User] u
--Check Grades Match
WHERE    u.userID IN
     (
     SELECT f.locumID
     FROM   dbo.Form f, dbo.FormEmployment emp
     WHERE  f.formID = emp.formID
     AND    emp.statusID = 101
     AND    emp.workYN = 1
     AND    emp.gradeID IN (
             select gradeID from dbo.ShiftGrade where shiftID = @p0
             )
     )

您可以看到我正在使用 IN 语句来执行此操作。但是,我只想返回一个用户列表,这些用户可以与分配给班次的成绩完全相同。因此,如果已为班次分配了 3 个等级,那么我希望返回一个也具有完全相同的三个等级的用户列表。

我为这篇冗长的帖子道歉,我只是认为这样解释会更好。对此的任何反馈或帮助将不胜感激。

4

1 回答 1

1
select u.*
from dbo.Users u
join dbo.Form f on u.? = f.formId
join dbo.FormEmployment fe on fe.formId = f.formId
join dbo.Grade g on g.gradeId =  fe.gradeId
join dbo.ShiftGrade shg on shg.gradeId =g.gradeId
join dbo.Shift sh on sh.shiftId = shg.shiftId
where
    sh.shiftId = -- recently added shift id
and g.gradeId == -- recently added grade id
于 2012-07-06T13:56:14.620 回答