質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

5回答

713閲覧

削除クエリについて。

jennieruby

総合スコア11

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/09/16 00:16

閲覧ありがとうございます。
削除クエリについて教えて頂きたいです。

今、社員の管理表をaccessで作成しています。
わが社では定年を迎え再雇用になると社員番号が変わります。
最初に管理表を作ったときあまり深く考えず社員番号が変わる前と変わった後の社員2つともレコードに入れていました。

しかし今になってそれじゃこれから作りたいものが作りずらくなるため社員番号が変わる前(再雇用者の元社員番号)のレコードを消し
今の社員番号のフィールドに旧社員番号を追加して保管していこうと思いました。

しかし、前の状態で作り続けていたため色々リレーションシップを組んだりいろんなテーブルで使っていたりとすごくややこしいため
削除クエリで一括で消したいと思います。

削除クエリなどでは複数テーブル、複数レコードを一括で消せるのでしょうか?
消したい社員番号も6人ほどいるので抽出条件も複数になってしまいます。

私ではなにも思いつかないのでお力を貸して頂きたいです。
VBAのほうが楽であればそちらもご教授お願い致します。

分かりづらくて申し訳ございませんが宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

削除クエリなどでは複数テーブル、複数レコードを一括で消せるのでしょうか?

1:1の結合条件なら複数のテーブルの同時削除は可能です。
deleteに[テーブル名].*で対象テーブルを指定します。

SQL

1delete a.*, b.* from a inner join b on a.id=b.a_id

1:nの場合はリレーションシップの連鎖更新若しくは、個別に削除クエリーが必要です。
※社員番号で連鎖更新できるようなリレーションになっているのは考え辛いので、削除クエリーでの対応でしょうね。

それよりも

最初に管理表を作ったときあまり深く考えず社員番号が変わる前と変わった後の社員2つともレコードに入れていました。

しかし今になってそれじゃこれから作りたいものが作りずらくなるため社員番号が変わる前(再雇用者の元社員番号)のレコードを消し、今の社員番号のフィールドに旧社員番号を追加して保管していこうと思いました。

「これから作りたいものが作りずらくなる」どのような理由ですか?

再雇用になるからといって今までの業務が無くなるわけではないのに、データを削除してしまっては、余計に業務に差支えが出ると思います。

残すのなら当然削除はNGです。
旧社員番号時代のデータも参照や更新の対象にする場合は、社員番号を履歴管理する方法もありますが、複雑になるので、社員番号を新社員番号で更新する程度が無難です。

投稿2020/09/16 02:12

編集2020/09/16 03:08
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

皆様の回答をもとにレコードは消さない方向でいきたいと思います。
アドバイスありがとうございました。

ベストアンサーはいつも回答してくださっているsazi様に決定しました。

投稿2020/09/16 08:02

jennieruby

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/09/16 10:06

気持ちはありがたいと思いますが、ベストアンサーは内容で判断して下さいね。
jennieruby

2020/09/16 23:34

内容もみなさん同じようなアドバイスでしたのでベストアンサーに選びましたが、気を悪くさせてしまったなら申し訳ございません。 以後気を付けます。
sazi

2020/09/17 00:59 編集

特に気にしてはいないですよ。 「いつも回答してくださっている」とあったので、気は遣わ無いで下さいという事です。 私は内容の評価でベストアンサーは決まると思っていますので。
guest

0

社員番号が変わる前(再雇用者の元社員番号)のレコードを消し
今の社員番号のフィールドに旧社員番号を追加して保管していこうと思いました。

関連付けされているテーブルの社員番号を新しい社員番号に書き直す事が必要で
レコード削除したらダメなような気がしますがレコード削除で大丈夫ですか?

他の方も書かれていましたが、旧社員番号と新社員番号の対比テーブルを一度作成して更新されたほうが良いような気がしますが...

投稿2020/09/16 05:58

kuma_kuma_

総合スコア2506

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

リレーションシップを組んでいるなら参照整合性の連鎖削除で消せばいいと思います。
いくつテーブルがあっても社員番号が主キーのテーブル(1側)から削除されれば、ほかのテーブル(多側)からも削除されます。

ただ社員番号が増えることで作りづらくなるっていうのがちょっとよくわからないですね。
社員番号が主キーのテーブルっていうのはまったくもって普通の仕様だと思います。
どうしても変えたいなら「人間テーブル」みたいなものを作って
人間IDと社員番号を一対多にするくらいでしょうか。
列で旧社員番号っていうのは私の感覚では「あとで苦労しそう」という作り方ですね…。

投稿2020/09/16 02:20

sousuke

総合スコア3830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

HeadersテーブルとDetailsテーブルのリレーションシップ

上記のようにHeadersテーブルとDetailsテーブルの間にリレーションシップが設定されている場合、

SQL

1DELETE FROM Headers WHERE HeaderId IN (1,3);

でHeadersテーブルに紐づくDetailsテーブルのレコードを同時に削除できます。

投稿2020/09/16 01:24

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問