No.2ベストアンサー
- 回答日時:
まず、基本的な発想を切り替えた方がよいと思われます。
データベースにおいては、
・必要な最低限のデータをテーブルに保存する。
・テーブルのデータを組み合わせたり計算したり集計したりというのは、全部クエリーで構成する。
というのが、基本です。
例えば、商品に単価があり、注文に数量がある。データベースの世界では、注文票の合計金額はテーブルに保存しません。
これには、理由があります。もし、各注文票の合計金額も計算してテーブルに保管したとします。もし、商品の単価表が改訂されたら・・・もし、注文票の数量が訂正されたら・・・もちろん、合計金額も訂正する必要があります。訂正を忘れたら・・・当然、困りますね。間違った注文票が出力されることになります。
これをデータの整合性と言います。データベースの世界では一番重要視される項目の一つです。これを維持することを目標にいろいろな仕掛けが用意されているのです。
基本的には、「何かのデータを更新しようとすると、それに連動して他のフィールドやテーブルのデータも修正しないといけない」という事態は嫌われます。
(あくまで、基本です。実際には、処理能力が追いつかないとか、いろいろな理由で基本を外れることは往々にしてあります。)
さて、これをあなたの質問に適用してみましょう。
なぜ、Xテーブルを作ろうとするのですか?AテーブルとBテーブルのデータがあれば、演算だけで、Xテーブルは作成できるんですよね?
基本としては、Xテーブルは作るべきではありません。
この様なときのために、クエリーという機構が存在します。
新しいクエリーを作成し、テーブルAとテーブルBを会員No.で結合します。このとき、Aテーブルのデータはすべて出力する用に、結合関係を設定してください。
この状態だと、結果のクエリーで、Bテーブルに存在しない会員のニックネームは、NULLとなっているはずです。
ニックネームの欄のフィールドには、次の式を入力します。
IIf(IsNull([ニックネーム]),"ゲスト",[ニックネーム])
これで、このクエリーを実行すれば、ご要望の表は出力できます。ちなみに、このクエリーですが、テーブルにできることは、大概のことは実行することができます。このクエリーをテーブルに見立てて、クエリーの一部として検索条件を設定することもできますし、レポートの出力の基礎とすることもできます。
また、テーブルAの更新もこのクエリーから実行できます。
残念ながらテーブルBの更新だけはできません。これを許すとデータが矛盾するからです。
データのエクスポートもできますし、エクセルなどからもテーブルと同じようにインポートすることもできます。
これで、いかがでしょうか。
クエリーの機能は、実に多彩で、これを使いこなせば、データ処理の大半においては、ほとんどVBAのお世話になることはないレベルまでの処理が可能です。VBAに手を出す前に、まずこの機能をちょっと勉強してみてください。
ていねいな説明、ありがとうございます。
テーブルXを作る理由は、システムがAccess→Oracleに移行するために
新システムのテーブルにデータを加工しなければいけなくて、
何かいい方法はないかなと思って質問させていただきました。
とにかく移行プログラム(クエリ)を作らなければならないので、
mitonekoさんの方法で試してみます。
ありがとうございました。
No.1
- 回答日時:
どうしてテーブルにする必要があるのですか?
クエリで十分だと思いますけど
それに分岐処理ってVBAでやろうとしているの?
>テーブルAの会員NOで、テーブルBの会員NOを参照して
こういう関係のテーブルがあるとき
会員として会員テーブルに登録するまでも無い人を登録したいというケースがあるのなら
特殊な会員Noで[ゲスト]というのを登録しておきます
これでテーブルのリレーションシップ、参照整合性なども問題なく設定できるようになります
説明、ありがとうございます。
テーブルXを作る理由は、システムがAccess→Oracleに移行するために
新システムのテーブルにデータを加工しなければいけなくて、
何かいい方法はないかなと思って質問させていただきました。
とにかく移行プログラム(クエリ)を作らなければならないので、
CHRONOS_0さんの方法で試してみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle SQL update方法 2 2022/06/22 14:07
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- PHP MySql PHP 2つのテーブルをJOINで結合 user_idで抽出 1 2023/01/03 14:04
- Oracle update文で質問です。 下記の条件でupdateをしたいですが、どのようにしたら良いでしょうか。 2 2022/06/23 10:51
- MySQL 【MySQL】本当に困っています。詳しい方、ご教授よろしくお願いします。 1 2023/06/03 14:18
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- その他(Microsoft Office) エクセルでテーブルの最終行が自動追加されない 1 2023/01/04 15:09
- MySQL 【MySQL】本当に困っているので、助けてください。よろしくお願いします。 3 2023/06/03 14:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル
-
データベースファイル(.db)を開...
-
警察はスマホに保存した動画や...
-
縦書きテキストボックスの表示"...
-
ファイルが壊れて読み取れませ...
-
データベースソフトの「TCARD f...
-
android版のMs accessはありま...
-
DBのタイプの指定とサイズにつ...
-
リスト形式の表とデータベース...
-
c言語の問題です。これを踏まえ...
-
「1004:アプリケーション定義...
-
Notion@リレーション値の取得...
-
Accessのリンクテーブルについて
-
CDデータ 泣き寝入りするしか...
-
Accessを開きなおすとテキスト...
-
googleフォームでインストール...
-
コンピュータ用語、データベー...
-
旧filemakerで和暦(令和など)...
-
QSL でのフォーム画面作成について
-
QRコードとバーコードについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースファイル(.db)を開...
-
Accessを開きなおすとテキスト...
-
警察はスマホに保存した動画や...
-
ACCESSのSQLで、NULLかNULLでな...
-
エクセルのフィルタ抽出が固まる
-
CSVファイルでテキストの改行の...
-
構文エラー:演算子がありませ...
-
Accessフォームからパラメータ...
-
20万行あるデータを動かしたい
-
Accessのリンクテーブルについて
-
コンピュータ
-
最新の日付とその金額をクエリ...
-
データベースとウェブ(WWW)の共...
-
更新クエリをリンクデータベー...
-
「1004:アプリケーション定義...
-
リスト形式の表とデータベース...
-
android版のMs accessはありま...
-
Excelフィルタ抽出で「検索して...
-
縦書きテキストボックスの表示"...
-
Notion@リレーション値の取得...
おすすめ情報