我在为我的应用程序编写 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 个等级,那么我希望返回一个也具有完全相同的三个等级的用户列表。
我为这篇冗长的帖子道歉,我只是认为这样解释会更好。对此的任何反馈或帮助将不胜感激。