[英]ms-access: runtime error 3354
我在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 ;
在此之前,我要根據給定條件從其他表中填充analyzeredCopy表。 對於一組條件,此代碼工作正常,但對於其他條件,它始終給我運行時錯誤“ 3354”。 我能看到的唯一區別是,在使用標准的情況下,該表大約有4145條記錄,而在使用該代碼的情況下,該表大約有9000條記錄。 有什么建議么?
有什么辦法告訴它只提取一半的信息,然后在表的另一半上運行相同的選擇字符串,然后將這些結果添加到上半部分的先前結果中?
運行時錯誤“ 3354”的全文為“此子查詢最多可以返回一條記錄”。
我只是嘗試在前4000條記錄上運行此查詢,但再次失敗,並顯示相同的錯誤代碼,因此它不是我想的記錄數量。
看到這個:
http://allenbrowne.com/subquery-02.html#AtMostOneRecord
發生的情況是您的子查詢返回兩個相同的記錄(基於ORDER BY),而TOP 1實際上返回了兩個記錄(是的,這就是訪問TOP語句的方式)。 您需要向ORDER BY添加字段以使其唯一-最好是唯一ID(您確實有唯一的PK嗎?)
正如下面的Andomar所述,DISTINCT TOP 1也將起作用。
運行子查詢時,MS-ACCESS返回什么?
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
如果返回多行,則可以使用DISTINCT進行修復:
SELECT DISTINCT TOP 1 analyzedCopy.ReadTime
FROM ... rest of query ...
我不知道這是否行得通(並且我不再擁有Access的副本以進行測試),所以如果我離開的話,我會在前面道歉。
首先,只需對analyzeredCopy的主鍵進行選擇即可獲得中點ID。 就像是:
SELECT TOP 4500 readings_miu_id FROM analyzedCopy ORDER BY readings_miu_id, ReadDate;
然后,當您擁有中點ID時,可以將其添加到原始語句的WHERE語句中:
SELECT ...
INTO ...
FROM ...
WHERE ... AND (readings_miu_id <= {ID from above}
ORDER BY ...
然后選擇另一半:
SELECT ...
INTO ...
FROM ...
WHERE ... AND (readings_miu_id > {ID from above}
ORDER BY ...
再一次,對不起,如果我走了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.