色々とネットで調べてみたのですが、ピンとこないので質問させていただいています。
以下のようなテーブルを想定しています。
「テーブルA」
ユニークキー データ1 データ2 ・・・
0001 ...
0002 ...
0003 ...
「テーブルB」
キー データA データB ・・・
0001 ...
0001 ...
0002 ...
テーブルAではユニークキーは重複していないのですが、テーブルBのキーは重複しています。
このような状況で、テーブルBの”キー”とテーブルAの”ユニークキー”を照合させて、テーブルBに”データ1 データ2 ・・・”を流し込みたいと思っています。
現状では、複数の検索結果が出るためにエラーとなっています。「一対多」結合を利用するというところまではわかったのですが、そこから先がよくわかりません。
どなたか解説していただけないでしょうか。
初心者の質問で恐縮ですが、お教え頂ければ嬉しいです。
No.2ベストアンサー
- 回答日時:
テーブルAはユニークキーですので、テーブルBのキーが重複していたとしても、それぞれのデータに対応するテーブルAのデータは一意に決まります。
こういうケースは1対多であっても、問題なく内部結合による更新を掛けることができます。Accessの場合の書式は以下の通りです。
(aとかbとかは別名で、毎回「テーブルA」「テーブルB」と書くのを省略するために使うものです)
UPDATE テーブルB AS b INNER JOIN テーブルA AS a ON a.キー=b.キー SET b.データ1 = a.データ1, b.データ2 = a.データ2;
jamshid6さん、ご回答ありがとうございました。
一方のデータが一意に定まっていれば、他方に重複があっても内部結合できるということですね。
結合の部分はややこしくて理解し難いので、徐々に慣れていきたいと思います。
大変助かりました。初歩的な質問にもご丁寧にご回答いただき、ありがとうございました!
No.4
- 回答日時:
>一対多については、”「一対多」のリレーションシップを「結合」して、
>データを処理していく”との理解でよろしいでしょうか。
リレーションシップはテーブルの関係を規定するもの
結合は2つのレコードセット(テーブルまたはクエリ)をどう結びつけるかを規定するものです
リレーションシップとは全く関係ありません
>その理由は余計なメモリを使ってしまうからでしょうか。
これは理由の中でも重要度の低いものです
一番重要な理由はデータの整合性を保つという点ですね
詳しくは本やヘルプで正規化について調べてください
これを理解しないといいデータベースは作れませんよ
CHRONOS_0さん、度々のご回答ありがとうございます。
わかりやすいく解説して頂いて、リレーションシップと結合の関係について理解できました。
いまはデータベースを使うのに精一杯ですが、次はデータベースの設計についても学んでいきたいと思います。
質問以外の文中の誤解までご指摘頂いて、ありがとうございます。自分で気づかないところを教えて頂けたので、大変勉強になりました。ありがとうございました。
No.3
- 回答日時:
結合には内部結合と外部結合しかありません
1対多はリレーションシップです
全く異なるものであることを理解した方がいいですね
>テーブルBに”データ1 データ2 ・・・”を流し込みたいと思っています。
こういうものはテーブルAとBを内部結合(Inner join)するSQLでできます
それと、
テーブルAのようなテーブルがあり、テーブルBがそれを参照している関係なら
テーブルBにはテーブルAの主キーだけを参照キーとして取り込みます
他のデータ1や2は取り込んではいけません
この回答への補足
CHRONOS_0さん、ご回答ありがとうございます。
一対多については、”「一対多」のリレーションシップを「結合」して、データを処理していく”との理解でよろしいでしょうか。
二点目の「データ1や2は取り込んではいけない」とのご指摘ですが、その理由は余計なメモリを使ってしまうからでしょうか。
よろしくお願いいたします。
No.1
- 回答日時:
やりたいことは「テーブルAの内容で、テーブルBを更新する」
つまり「テーブルBにもデータ1、データ2などのフィールドがあって、そこにキーが一致するテーブルAのデータ1、データ2の内容をセットしていきたい」ということであっていますか?
もし上の理解があっているならば、この場合の更新処理はDBMSによって書き方が随分違いますので、何のデータベースを使っているのかわからないとコメントしづらいです。
あえて「その他(データベース)」に書かれているところから、Accessかなとは思ったのですが、もしかしたらMySQLやOracleかもしれないので。。。
この回答への補足
早速のご回答ありがとうございます。
「テーブルBにもデータ1、データ2などのフィールドがあって、そこにキーが一致するテーブルAのデータ1、データ2の内容をセットしていきたい」の通りで間違いありません。
テーブルBにあるキーの重複をどのように回避すればいいのか、が現在の障害です。
また、データベースはご指摘の通りAccessです。今回はアプリケーションの機能ではなく、SQL文で処理していかなければならない状況です。
お手数おかけしますが、よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- Excel(エクセル) Excel同士のデータの突合 3 2023/08/07 16:34
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
GROUP BYを行った後に結合したい。
Oracle
-
Viewにインデックスは張れますか?
Oracle
-
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
-
4
htmlでテーブル内にテキストボックスを作りたいのですが・・・
HTML・CSS
-
5
inner joinをすると数がおかしくなります
MySQL
-
6
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
7
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
8
Javaで年月の取得(YYYYMM形式で)
Java
-
9
SQLで部分的にGROUP BYしたいとき
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
accessでレコード更新直後の反...
-
結合テーブルでINSERTする方法...
-
htmlコードで書かれた表にphpで...
-
Accessでの稼働日数計算の方法
-
テーブルで一番古いレコードだ...
-
Access昇順レコードを、5分割...
-
access2000 オートナンバーで...
-
ビューのソートについて
-
削除したテーブルを元に戻すこ...
-
同一テーブルのデータを参照し...
-
ERROR1062:Duplicate entry.......
-
「クリップボードにコピーされ...
-
ACCESS2000でのリンクテーブル...
-
Oracleで上書きImportはできま...
-
IF NOT EXISTを使用するINSERT文
-
VBAでSQLServerへのODBC接続
-
CONNECT BYに関して
-
mysqlへの書き込みがリロードす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
Oracleで上書きImportはできま...
-
テーブルで一番古いレコードだ...
-
accessでレコード更新直後の反...
-
ビューのソートについて
-
このISAMでは、リンクテーブル・・
-
同一テーブルのデータを参照し...
-
アクセス レコードセットを更...
-
マテリアライズドビューとスナ...
-
住所のDBテーブル、マスターの...
-
ACCESSで容量が50MBになった...
-
重複クエリを使ったデータ削除
-
処理の途中で停止させ、再開さ...
-
結合テーブルでINSERTする方法...
-
SQL文の結合(一対多)がわから...
-
ERROR1062:Duplicate entry.......
-
IF NOT EXISTを使用するINSERT文
-
htmlコードで書かれた表にphpで...
-
Accessのインポートについて(上...
おすすめ情報