包括另一个数据集

时间:2016-01-19 13:02:55

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

我尝试按照WHERE NOT EXISTSWHERE NOT IN的方式做一些事情,但我正在努力学习语法。

这是我到目前为止所得到的结果集,我们称之为 PlanActStaff

SELECT 
    CTE_PlanStaff.RegisterID,
    CTE_PlanStaff.TT_ActivityDate,
    CTE_PlanStaff.TT_ActivityTime,
    CTE_PlanStaff.TT_StaffID,
    CTE_ActStaff.ActStaffID
FROM
    CTE_PlanStaff
INNER JOIN
    CTE_ActStaff
ON
    CTE_PlanStaff.RegisterID = CTE_ActStaff.RegisterID
AND
    CTE_PlanStaff.TT_ActivityDate = CTE_ActStaff.ActSessionDate
AND
    CTE_PlanStaff.TT_ActivityTime = CTE_ActStaff.ActSessionStartTime

对于此结果集中的每条记录,我希望查询返回并检查我的CTE_PlanStaff CTE,以查看ActStaffID,{{1}的当前组合是否存在RegisterID {}}中的{}和TT_ActivityDate

例如,如果在 PlanActStaff 中检查的记录如下所示:

TT_ActivityTime

CTE_PlanStaff将在| RegisterID | TT_ActivityDate | TT_ActivityTime | TT_StaffID | ActStaffID | |------------|-----------------|-----------------|------------|------------| | 98688 | 2016-01-04 | 11:20 | 2453 | 2067 | CTE_PlanStaffRegisterID的同一组合上进行过滤,因此TT_ActivityDate可能会将这些记录进行比较:< / p>

TT_ActivityTime

然后我希望CTE_PlanStaff的{​​{1}}值与过滤的| RegisterID | TT_ActivityDate | TT_ActivityTime | TT_StaffID | |------------|-----------------|-----------------|------------| | 98688 | 2016-01-04 | 11:20 | 2500 | | 98688 | 2016-01-04 | 11:20 | 2453 | 中的每个ActStaffID进行核对,如果2067不是&#39 ;列出将该记录显示在我的 PlanActStaff 查询中。

我尝试按照以下方式调整 PlanActStaff ...

TT_StaffID

...但我收到以下错误:

  

当选择列表中只能指定一个表达式时   子查询不是用EXISTS引入的。

我开始关注CTE_PlanStaff,但我无法弄清楚如何针对当前记录过滤ActStaffID,然后检查staffID字段。

1 个答案:

答案 0 :(得分:1)

  

WHERE

ActStaffID NOT IN (
    SELECT *
    FROM
        CTE_PlanStaff
    WHERE
        CTE_PlanStaff.RegisterID = PlanActStaff.RegisterID
    AND
        CTE_PlanStaff.TT_ActivityDate = PlanActStaff.TT_ActivityDate
    AND
        CTE_PlanStaff.TT_ActivityTime = PlanActStaff.TT_ActivityTime
)

您应该只选择一个要与'ActStaffID'进行比较的字段