OSWINDOWS98SE
AC2000
こんにちは、前回「AC2000のクエリで重複データから最新のデータだけ抽出したいのですが・・・」と言う質問をさせていただいて、教えていただいたSQLを使って色々とやってみたのですがどうしても2番のところで
クエリ式'[主索引]
delete 既存データA.*
from 既存データA inner join 一時テーブル
on 既存データA.主索引 = 一時テーブル.主索引
insert into 既存データA(主索引,更新回数)
select 更新データB.主索引'の構文エラー:演算子がありません。
と言うコメントがでてしまいさきに進むことが出来なくなってしまいました。
構文エラー?演算子がありません??他を探してみたのですが乏しい知識の範囲では解決を見つけることが出来ずまた、質問させていただいた次第です。
1番の一時テーブルは作成できるのですが、2番以降がうまくいきません
どうかご教授お願いいたします。
1.更新データBから一時テーブルの作成
2.更新されているデータを予め削除する
3.既存データAへ追加データ、更新データをinsert
前回の質問
http://oshiete1.goo.ne.jp/kotaeru.php3?q=155505
No.2ベストアンサー
- 回答日時:
<br /> アクセスだと結合されたテーブルのデータを削除することは出来ないみたいですね。(汗)<br /> tokinさんす
。#アクセスのこの仕様おかしくないかな?
#どなたか詳しくご存知の方フォローしてください
別の方法で行きましょう。
>1.更新データBから一時テーブルの作成
>2.更新されているデータを予め削除する
>3.既存データAへ追加データ、更新データをinsert
1.はそのまま
2.更新されたデータを「UPDATE」
3.追加データをinsert
SQLは、
2.データの更新
UPDATE 既存データA INNER JOIN 一時テーブル
ON 既存データA.主索引 = 一時テーブル.主索引 SET 既存データA.更新回数 = [一時テーブル].[最終更新],....
3.新規データの追加
INSERT INTO 既存データA ( 主索引, 更新回数...)
SELECT 更新データB.主索引, 更新データB.更新回数...
FROM 更新データB LEFT JOIN 既存データA
ON 更新データB.主索引 = 既存データA.主索引
WHERE (((既存データA.主索引) Is Null))
※主索引が更新データBにあって、既存データAにないものを追加しています。
ご迷惑をおかけして済みませんでした。
storkさんありがとうございます。
>ご迷惑をおかけして済みませんでした。
いえいえとんでもありません、こちらこそ無理を言いまして申し訳ありません。
感謝しております。
いただいた回答早速実行してみます。
本当にありがとうございます。
No.1
- 回答日時:
<br /> 言葉定義は前回の質問と回答を尊重して<br /> <br /> 0:更新データBをクリアします。<br />
更新データB.*FROM 更新データB;
1:Bのファイルを更新データBにインポートします。
2:更新データBから一時テーブルを作成します。
クエリー名:Q1
SELECT 更新データB.主索引, Max(更新データB.更新回数) AS 更新回数の最大 INTO 一時テーブル
FROM 更新データB
GROUP BY 更新データB.主索引;
3:一時テーブルと既存データAを比較し、一時テーブルしかない場合と更新データBの更新回数が大きい主索引一覧を作成します。
クエリー名:Q2
SELECT 一時テーブル.主索引, 一時テーブル.更新回数の最大
INTO 一時テーブル2
FROM 一時テーブル LEFT JOIN 既存データA ON 一時テーブル.主索引 = 既存データA.主索引
WHERE (((一時テーブル.更新回数の最大)>[既存データA].[更新回数])) OR (((既存データA.主索引) Is Null));
4:既存データAから不要なデータを削除する。
クエリー名:Q3
DELETE 既存データA.*, 既存データA.主索引
FROM 既存データA
WHERE (((既存データA.主索引) In (SELECT 一時テーブル2.主索引 FROM 一時テーブル2)));
5:更新データBから追加が必要な分のみを追加する。
クエリー名:Q4
INSERT INTO 既存データA
SELECT 更新データB.*
FROM 更新データB INNER JOIN D ON (更新データB.主索引 = D.主索引) AND (更新データB.更新回数 = D.更新回数の最大);
この6段階の作業を行えば出来るはずです。
注意:アクセスを起動してからデータインポートそして更新作業まで含みました。
これを自動化する場合はマクロなり、VBAなりで対応してください。
なお番号1つに対して1つの命令(マクロなら行)が必要になります。
という事で5つのクエリーが必要ですね。
取り合えずざっくりとサンプルを作ったので動くとは思うのだけど間違っていたり、分からないことがあれば補足してください。
ところで前回のstorkさんの回答では、既存データAの方が更新回数が大きい場合の処理が抜けていましたので追加しています。
yanmaaさん早速のご回答ありがとうございます。
また、丁寧な説明で初心者の私にはとても助かります。
常に学習精神を忘れずに、早速やってみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Excel(エクセル) Excelでデータを抽出するに良い方法 9 2023/02/06 12:42
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
- Excel(エクセル) Excelでのデータ管理 6 2022/12/24 09:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
マテリアライズドビューとスナ...
-
同一テーブルのデータを参照し...
-
Accessのテーブルデータを一気...
-
accessでレコード更新直後の反...
-
結合テーブルでINSERTする方法...
-
テーブルで一番古いレコードだ...
-
ビューのソートについて
-
ERROR1062:Duplicate entry.......
-
削除したテーブルを元に戻すこ...
-
Accessでの稼働日数計算の方法
-
Pervasive.SQLについて
-
htmlコードで書かれた表にphpで...
-
Access リレーションのある項...
-
ACCESS2000でのリンクテーブル...
-
Accessでレコード削除ができな...
-
Access VBAからエクセルに出力...
-
VBAでSQLServerへのODBC接続
-
IF NOT EXISTを使用するINSERT文
-
処理の途中で停止させ、再開さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
Oracleで上書きImportはできま...
-
テーブルで一番古いレコードだ...
-
accessでレコード更新直後の反...
-
ビューのソートについて
-
このISAMでは、リンクテーブル・・
-
同一テーブルのデータを参照し...
-
アクセス レコードセットを更...
-
マテリアライズドビューとスナ...
-
住所のDBテーブル、マスターの...
-
ACCESSで容量が50MBになった...
-
重複クエリを使ったデータ削除
-
処理の途中で停止させ、再開さ...
-
結合テーブルでINSERTする方法...
-
SQL文の結合(一対多)がわから...
-
ERROR1062:Duplicate entry.......
-
IF NOT EXISTを使用するINSERT文
-
htmlコードで書かれた表にphpで...
-
Accessのインポートについて(上...
おすすめ情報