Microsoft Access 掲示板

一時テーブルの内容を元テーブルに書き戻したい

3 コメント
views
4 フォロー

質問ばかりで恐れ入ります。

一時テーブルは元テーブルの部分的なレコードで、
追加・更新・削除を行うことがあります。
SQLで処理して元テーブルに戻そうとするのに、
INSERT・ UPDATEは上手くいくのですが
DELETEの書き方が出来ずにいます。
詳細は添付画像の通りです。
画像1

本来、どのようにSQLを記述したかを書くべきところですが、
あれこれ試しすぎて残しておりません。

記述が間違っている意味合いのメッセージが出るか、
何も起きないか、
変化が生じたのは画像のような失敗です。

SQLでは難しかったりするのでしょうか。
ご教授お願いいたします。

MiT
作成: 2019/10/14 (月) 16:37:38
最終更新: 2019/10/16 (水) 12:16:26
通報 ...
1
hatena 2019/10/16 (水) 12:09:44 修正

T_受講受付 の主キー設定を提示してください。

INSERT・ UPDATEは上手くいくのですが

そのうまくいっているSQLを提示してください。

あと、一時テーブルへデータをエクスポートするときの抽出条件はどこでどのように設定してますか。

2

とりあえず画像ファイルからの想像ですが、
一時テーブル以外のレコードがすべて削除されているようですね。

データを一時テーブルへ転送するときに、元テーブルに何らかの抽出条件を設定しているはずです。
削除クエリにも、同じ抽出条件を設定しないと、そのような結果になりますね。

3

hatenaさま、返信ありがとうございます。

日が変わり脳みそがリセットされたら、解決いたしました。

>一時テーブルへデータをエクスポートするときの抽出条件はどこでどのように設定してますか。

抽出条件に関する「W.回数=T.回数」について、
DELETEのSQLでの記載箇所“どこで”を誤っておりました。
EXSITSの中でこねくり回してしまっておりました。
下記のとおり書いたらうまく動作しました。

DELETE FROM T_受講受付 AS T
WHERE W.回数=T.回数 and NOT EXSITS (SELECT * FROM W_受講受付 AS T WHERE W.申込者=T.申込者)

どうもお騒がせいたしました。

もう不要ではありますが、うまく動作している方のSQLは下記のとおりとしておりました。
(実際のテーブルのフィールドは多いのでstrとしています。)

UPDATE T
INNER JOIN W
ON T.回数=W.回数
SET  & strフィールド &
WHERE T.回数= str抽出した回数

INSERT INTO T ( & strフィールド & )
SELECT & strフィールド &
FROM W

ありがとうございました。
今後ともよろしくお願いいたしますm(__)m