查找不包含任何NULL值的组

时间:2019-03-13 14:02:46

标签: sql sql-server tsql aggregate-functions

我有一个名为dbo.ObjectOwner的多对多表,具有以下各列:

ObjectId |  OwnerId | StartDate |EndDate

其中ObjectId,OwnerId不是主键,而Startdate和Enddate是指所有者拥有对象的日期。

我要执行的查询应返回所有 ObjectId的位置,每个ObjectId都没有关联的记录,其中EndDate为null。即,返回当前没有所有者的所有对象。

类似

foreach(objectId in dbo.ObjectOwner)
if ( 
        doesnotexist (records where ObjectId = objectid and EndDate is null)
   )
{
   add this objectid to the select table
}

我查看了分组依据,但是以下脚本返回了所有记录

SELECT oo.ObjectId
FROM    dbo.ObjectOwner oo
GROUP BY oo.ObjectId
HAVING NOT EXISTS (
    SELECT  1
    FROM    dbo.ObjectOwner
    WHERE   dbo.ObjectOwner.EndDate = null
)

预先感谢

2 个答案:

答案 0 :(得分:2)

如果您写<...> = NULL则不起作用,因为NULL不能等于某个值。

  canActivate() {
    return this.authService.isAuthenticated()
      .pipe(
        mergeMap(authenticated => {
          if (!authenticated) {
            return throwError('not authenticated');
          }
          return this.userService.verifyUserSession().pipe(
            mapTo(true)
          );
        }),
        catchError(error => {
          this.router.navigate(['auth/sign-in']);
          return of(false);
        })
      );
  }

答案 1 :(得分:2)

您可以使用GROUP BYHAVING。由于NULL的值未进行COUNT编辑,因此以下操作有效:

SELECT ObjectId
FROM ObjectOwner
GROUP BY ObjectId
HAVING COUNT(*) = COUNT(EndDate)