ODBC 接続を使用してリモートの PostgreSQL データベースからデータを取得して、ローカルの Access 2010 テーブルを更新しようとしています。Access 更新クエリで条件を手動で指定するWHERE
と、限られた数の行が Access に渡されていることがデータベース サーバーでわかります。ただし、WHERE
ローカルの Access テーブルの最後の行に基づいて条件を動的にすると、テーブル全体が Access に取り込まれ、条件がメモリに適用されたように見えます (決して完了しないためだと思います)。
たとえば、このクエリはリモート データベースから 2012 行のみをフェッチWHERE
し、remove サーバーで句を確認できます。
INSERT INTO local (dt, latitude, longitude)
SELECT dt, latitude, longitude
FROM remote_odbc
WHERE remote_odbc.dt > #2011-12-31 23:59:59#;
しかし、私が本当に望んでいるのは、アクセスがdt
ローカル テーブルの最後の日時 ( ) を見て、リモート データベースからそれらの行のみを取得することです。
これは私が試したものです:
INSERT INTO local (dt, latitude, longitude)
SELECT dt, latitude, longitude
FROM remote_odbc, (SELECT max(dt) AS max_dt FROM local) AS sub
WHERE remote_odbc.dt > max_dt;
これを行うと、サーバーで実行されているクエリには句がまったく含まれていないため、Access がリモート テーブル全体を取得してから、句をローカルに適用しWHERE
ていると思われます。テーブルが大きすぎ、インターネットが遅すぎて実用的ではありません。WHERE
ODBC リンク経由で必要な行のみを取得するように、更新クエリを書き直すにはどうすればよいですか?