ms-access:运行时错误3354

Bry*_*yan 1 sql ms-access

我在ms-access中运行sql时遇到问题.即时通讯使用此代码:

SELECT readings_miu_id, ReadDate, ReadTime, RSSI, Firmware, Active, OriginCol, ColID, Ownage, SiteID, PremID, prem_group1, prem_group2  
INTO analyzedCopy2  
FROM analyzedCopy AS A 
WHERE ReadTime =  (SELECT TOP 1 analyzedCopy.ReadTime FROM analyzedCopy  WHERE analyzedCopy.readings_miu_id = A.readings_miu_id  AND analyzedCopy.ReadDate = A.ReadDate  ORDER BY analyzedCopy.readings_miu_id, analyzedCopy.ReadDate, analyzedCopy.ReadTime)
ORDER BY A.readings_miu_id, A.ReadDate ; 
Run Code Online (Sandbox Code Playgroud)

在此之前,我根据某些标准从其他表中填写analyzeCopy表.对于一组标准,这段代码工作正常,但对于其他人,它一直给我运行时错误'3354'.我能看到的唯一不同之处在于,根据可行的标准,该表大约有4145条记录长,而使用此代码的表格不起作用的条件长度超过9000条记录.有什么建议?

是否有任何方法告诉它只拉出一半的信息,然后在表格的另一半上运行相同的选择字符串,并将这些结果添加到上半年的前一个结果中?

运行时错误"3354"的全文是"此子查询最多可以返回一条记录".

我只是尝试在前4000条记录上运行此查询,并且它再次失败并使用相同的错误代码,因此它不能是我想到的记录数量.

DJ.*_*DJ. 5

看到这个:

http://allenbrowne.com/subquery-02.html#AtMostOneRecord

发生的事情是你的子查询返回两个相同的记录(基于ORDER BY),TOP 1实际上返回两个记录(是的,这是TOP语句的访问方式).你需要在ORDER BY中添加字段以使其唯一 - 最好是一个唯一的ID(你确实有一个独特的PK吗?)

正如Andomar所述,DISTINCT TOP 1也将起作用.