アプリ版:「スタンプのみでお礼する」機能のリリースについて

色々とネットで調べてみたのですが、ピンとこないので質問させていただいています。
以下のようなテーブルを想定しています。

「テーブルA」
ユニークキー データ1 データ2 ・・・
0001 ...
0002 ...
0003 ...

「テーブルB」
キー データA データB ・・・
0001 ...
0001 ...
0002 ...

テーブルAではユニークキーは重複していないのですが、テーブルBのキーは重複しています。
このような状況で、テーブルBの”キー”とテーブルAの”ユニークキー”を照合させて、テーブルBに”データ1 データ2 ・・・”を流し込みたいと思っています。
現状では、複数の検索結果が出るためにエラーとなっています。「一対多」結合を利用するというところまではわかったのですが、そこから先がよくわかりません。
どなたか解説していただけないでしょうか。

初心者の質問で恐縮ですが、お教え頂ければ嬉しいです。

A 回答 (4件)

テーブル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;
    • good
    • 1
この回答へのお礼

jamshid6さん、ご回答ありがとうございました。
一方のデータが一意に定まっていれば、他方に重複があっても内部結合できるということですね。
結合の部分はややこしくて理解し難いので、徐々に慣れていきたいと思います。
大変助かりました。初歩的な質問にもご丁寧にご回答いただき、ありがとうございました!

お礼日時:2008/08/07 02:25

>一対多については、”「一対多」のリレーションシップを「結合」して、


>データを処理していく”との理解でよろしいでしょうか。
リレーションシップはテーブルの関係を規定するもの
結合は2つのレコードセット(テーブルまたはクエリ)をどう結びつけるかを規定するものです
リレーションシップとは全く関係ありません

>その理由は余計なメモリを使ってしまうからでしょうか。
これは理由の中でも重要度の低いものです
一番重要な理由はデータの整合性を保つという点ですね
詳しくは本やヘルプで正規化について調べてください
これを理解しないといいデータベースは作れませんよ
    • good
    • 2
この回答へのお礼

CHRONOS_0さん、度々のご回答ありがとうございます。
わかりやすいく解説して頂いて、リレーションシップと結合の関係について理解できました。
いまはデータベースを使うのに精一杯ですが、次はデータベースの設計についても学んでいきたいと思います。
質問以外の文中の誤解までご指摘頂いて、ありがとうございます。自分で気づかないところを教えて頂けたので、大変勉強になりました。ありがとうございました。

お礼日時:2008/08/07 14:34

結合には内部結合と外部結合しかありません


1対多はリレーションシップです
全く異なるものであることを理解した方がいいですね

>テーブルBに”データ1 データ2 ・・・”を流し込みたいと思っています。
こういうものはテーブルAとBを内部結合(Inner join)するSQLでできます

それと、
テーブルAのようなテーブルがあり、テーブルBがそれを参照している関係なら
テーブルBにはテーブルAの主キーだけを参照キーとして取り込みます
他のデータ1や2は取り込んではいけません

この回答への補足

CHRONOS_0さん、ご回答ありがとうございます。
一対多については、”「一対多」のリレーションシップを「結合」して、データを処理していく”との理解でよろしいでしょうか。
二点目の「データ1や2は取り込んではいけない」とのご指摘ですが、その理由は余計なメモリを使ってしまうからでしょうか。
よろしくお願いいたします。

補足日時:2008/08/07 02:47
    • good
    • 0

やりたいことは「テーブルAの内容で、テーブルBを更新する」


つまり「テーブルBにもデータ1、データ2などのフィールドがあって、そこにキーが一致するテーブルAのデータ1、データ2の内容をセットしていきたい」ということであっていますか?

もし上の理解があっているならば、この場合の更新処理はDBMSによって書き方が随分違いますので、何のデータベースを使っているのかわからないとコメントしづらいです。

あえて「その他(データベース)」に書かれているところから、Accessかなとは思ったのですが、もしかしたらMySQLやOracleかもしれないので。。。

この回答への補足

早速のご回答ありがとうございます。
「テーブルBにもデータ1、データ2などのフィールドがあって、そこにキーが一致するテーブルAのデータ1、データ2の内容をセットしていきたい」の通りで間違いありません。
テーブルBにあるキーの重複をどのように回避すればいいのか、が現在の障害です。
また、データベースはご指摘の通りAccessです。今回はアプリケーションの機能ではなく、SQL文で処理していかなければならない状況です。
お手数おかけしますが、よろしくお願いいたします。

補足日時:2008/08/06 02:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す