MS Access SQL错误

时间:2015-05-17 20:03:06

标签: sql ms-access-2010

此代码应该选择TOP 1,但它无法正常工作。它没有显示TOP 1记录,而是显示了大量的记录。可能是因为我引用了2个表。在另一个代码中我只有1并且它有效。我需要参考表出席率,所以我不确定如何解决这个问题。谢谢!

SELECT TOP 1 userID 
FROM attendance, CFRRR 
WHERE [attendance.Programs] LIKE CFRRR.program  
AND [attendance.Language] LIKE CFRRR.language 
AND [attendance.Status] = 'Available' 
ORDER BY TS ASC

以下是出勤的表格字段:userID,username,Supervisor,Category,AttendanceDay,AttendanceTime,Programs,Language,Status,TS。

以下是CFRRR的表字段:CFRRRID,WorkerID,Workeremail,Workername,Dateassigned,assignedby,RRRmonth,Scheduledate,scheduledtime,type,ScheduledType,caseid,language,lastname,firstname,Checkedin,Qid,status,CompletedType,comments ,actiondate,verifduedate,program。

显然,最后一张表有很多记录。

1 个答案:

答案 0 :(得分:1)

MS Access中的

SELECT TOP与SQL Server中的SELECT TOP和其他数据库中的类似功能不同。它根据order by返回顶行。然后它继续返回与最后一个值匹配的行。这有时很方便,这就是为什么SQL Server将此功能作为SELECT TOP WITH TIES

要解决此问题,您需要包含一个或多个对每个生成的行唯一的列:

SELECT TOP 1 userID 
FROM attendance as a,
     CFRRR 
WHERE a.Programs LIKE CFRRR.program  AND
      a.Language LIKE CFRRR.language  AND
      a.Status = 'Available' 
ORDER BY TS ASC, userId, CFFRID