2009-05-26 20 views
1

ms-accessでSQLを実行する際に問題があります。イムこのコードを使用:ms-access:ランタイムエラー3354

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 ; 

をして、この前に私は一定の基準与えられた他のテーブルからanalyzedCopy表に記入しています。 1つの基準セットに対して、このコードはうまく動作しますが、他のコードでは実行時エラー '3354'を与え続けます。私が見ることができる唯一のdiferenceは、動作する基準では、テーブルは、このコードを使用しているテーブルが動作しない基準では、9000レコード以上の長さはどこに約4145レコードです。助言がありますか?

情報の半分を取り出し、同じ選択文字列をテーブルの他の半分で実行し、最初の半分の前の結果にそれらの結果を追加する方法はありますか?

実行時エラー「3354」の全文は、それが「最大1つのレコードは、このサブクエリで返すことができます。」されていることです

私は最初の4000のレコードに対してこのクエリを実行しようとしましたが、それは私が思うだろうレコードのammountすることはできませんので、それは同じエラーコードで再び失敗しました。

+0

ランタイムエラー3354とは何ですか? – JeffO

答えて

5

この参照:

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

何が起こっていることは、あなたのサブクエリは、(ORDER BYに基づく)二つの同一のレコードを返していると、TOP 1は、実際には2つのレコードを返している(はいそれはアクセスがTOPを行う方法ですがステートメント)。 ORDER BYにフィールドを追加してユニークにする必要があります。ユニークなID(ユニークなPKはありませんか?)

下記のAndomarが示すように、DISTINCT TOP 1も機能します。あなたはサブクエリを実行するときにMS-ACCESSのリターンを何

+0

いいえ私はこのテーブルに一意のプライマリキーを持っていませんが、私はこのソリューションを試していますが、私は私のcompを再起動しなければならなかった、ユニークな他のテーブルからフィールドを引き出すことができます。 "私はそれを実行しようとすると。そのむしろ厄介な、うまくいけば再起動はその問題の世話をするでしょう。 – Bryan

+1

特定の行を参照する必要がある場合があることはわかっていません。 –

+0

これは私のために働いた、ありがとう。コマンドTOP 1 !!!!!!!!!!!!!!が本当に面倒です。 2つのものを返すことができます。どのように助けと情報のおかげで – Bryan

0

これが仕事をしたりしませんかどうかは知りません(と私はもはや上のテストするためのアクセスのコピーを持っている)ので、私は道オフだ場合、私はフロントをお詫び申し上げます。

まず、ちょうど中間点のIDを取得するためにanalyzedCopyの主キーに選択を行います。ような何か:次に

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:

を再び
SELECT ... 
INTO ... 
FROM ... 
WHERE ... AND (readings_miu_id > {ID from above} 
ORDER BY ... 

、私は遠く離れてる場合は申し訳ありません。

2

?それは複数の行を返す場合

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 ... 
+0

いいアイデア。私のために働く。 – Fionnuala