• 締切済み

Set rst = db.OpenRecordset("SELECT

Set rst = db.OpenRecordset("SELECT a.name FROM tableA inner JOIN TABLEB ON [a].name = [b].name where [a].age <> [a].age", dbOpenDynaset) のようなSQLで、名前は同じで年だけ違うデータを取得して Do Until rst.EOF = True  までデータを書き出す処理をアクセスのモジュールで作成しているのですが、、 なぜか結果が繰り返しでてきてしまいます。 例: たろう 30歳 はなこ 15歳 いちこ 10歳 たろう 30歳 はなこ 15歳 ・・・ のように、たろう~いちこのセットが何度もかかれてしまいます。 EOFとは、あくまでファイルの終わりを意味していて、SELECTの結果が3件の場合でも、 ファイルの30件までは繰り返し処理をしてしまうということでしょうか? 3件だけ出力するにはどうしたらいいのか教えてください。

みんなの回答

  • sppla
  • ベストアンサー率51% (185/360)
回答No.3

>EOFとは、あくまでファイルの終わりを意味していて、SELECTの結果が3件の場合でも、 >ファイルの30件までは繰り返し処理をしてしまうということでしょうか? 1件読むごとにMoveNextしていれば、レコード数までの処理で終わるはずです。 質問からはDoループが無限ループになるようなこともなさそうなのでVBA側での問題ではなくSQLが怪しいと感じます。 >オラクルDB上で実際動かしてはいますし、 この場合に返ってくるデータは期待どおり(上の例ですと3件ですね)でしたか? SQL PlusやAccessのパスクエリーで確認できると思います。(すいませんOracleは詳しくないのでSQLのテスト方法に他の方法があるか知りません。) テーブル構造や格納されているデータについての情報がないのでSQLが正しいかどうかは正しく回答することはできませんが、例えばテーブルA、Bともに下記の2レコードがあったとして(つまりテーブルABはこの例では同一のデータを持っています) たろう 30歳 たろう 20歳 SELECT tableA.name FROM tableA inner JOIN tableB ON tableA.name = tableB.name where tableA.age <> tableB.ageのようなSQLを実行すると、次のように2レコード返ってきます。 たろう たろう (一方はA30歳-B20歳に対応するレコードで、もう一方はA20歳-B30歳に対応するレコードですね。テーブルAの名前しかSelectでは表示していないので同じデータに見えますが・・・) 今ちょっと予想しているのが、1つのテーブルをもとにした自己結合で、同じ名前で異なる年齢のデータを抜き出したい(上の例では1レコードだけ「たろう」と抜き出したい)のに、上記の例のような感じで複数行返ってきてお困りなのじゃないかと思っています。

すると、全ての回答が全文表示されます。
  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.2

DBがAccessVBAと仮定して・・・SQL文を以下のようにしたら希望の結果になりますか? SELECT TableA.name, TableA.age FROM TableA INNER JOIN TableB ON TableA.name = TableB.name WHERE TableA.age<>TableB.age

すると、全ての回答が全文表示されます。
noname#182251
noname#182251
回答No.1

私には理解しがたいSQLですが。 まずDBというかプラットフォームはなんでしょう?提示されているのはアクセスVBAでしょうか。 a.name FROM だけで年齢も拾うのでしょうか? bテーブルにはどのようなデータが入っているのでしょうか? where [a].age <> [a].age 同じテーブルの年齢が違うレコードという指定も良く判りません もしアクセスVBAならば、VBA以前に単純なSQL文(クエリ)でデータの抽出を試みた方が良いでしょう。

makikorin
質問者

補足

すみません・・・。 会社のDB名やテーブル名を使っているので、コピーするわけにはいかず、いろいろと言葉を変更していたらおかしなSQLになってしまっていました。 構文がおかしいわけではないんです。 オラクルDB上で実際動かしてはいますし、 今やろうとしているのはアクセスのVBAでのSQLです。 失礼しました。

すると、全ての回答が全文表示されます。

関連するQ&A