此代码应该选择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。
显然,最后一张表有很多记录。
答案 0 :(得分:1)
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