匹配所有记录

时间:2012-07-06 13:33:42

标签: sql sql-server sql-server-2008 tsql

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

enter image description here enter image description here

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

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

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

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

我编写了以下SQL查询,但是,此查询的问题是它返回的用户列表,其中任何等级与分配给Shift的等级的等级相匹配。

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语句执行此操作。但是,我只想返回一个用户列表,这些用户可以完全匹配已分配给Shift的相同等级。因此,如果为Shift分配了3个等级,那么我想要一个同样具有相同三个等级的用户列表。

我为冗长的帖子道歉,我只是觉得用这种方式解释得更好。 任何反馈或帮助都将非常感激。

1 个答案:

答案 0 :(得分: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