- PR -

1対多のリレーション

投稿者投稿内容
ほえほえ
会議室デビュー日: 2008/07/09
投稿数: 8
投稿日時: 2008-08-01 18:37
マスター(Table)
ID
項目名(例:住所、TEL、FAX)

データ(Table)
名簿ID(WHERE句で絞ります)
ID(マスターの項目名を引っ張ってきます)


名簿のようなもので、項目は追加削除可能です。
1人にマスターに存在する個数の項目と値のセットを登録するイメージです。

説明がうまくできなくて申し訳ないです。
よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-08-01 22:55
select
D.名簿ID, D.ID, M.項目名, D.値, その他必要な項目
from データ D
left join マスター M on M.id = d.id


update データ set 値=? where id=? and 名簿ID=?


delete from データ where id=? and 名簿ID=?


じゃない?
ほえほえ
会議室デビュー日: 2008/07/09
投稿数: 8
投稿日時: 2008-08-05 10:30
返事が遅くなりました。

どうやら、DataViewがビューではなく、DataSet内のDataTableがビューとして扱われていて、それをテーブルと呼称していることが紛らわしかったようです。

単純にFillする時にテーブル名(ビューの名前)を指定してUpdate時にもテーブル名(ビューの名前)を指定することで問題なく更新できました。

しかし、本当にジョインしたビューを表示させるDataSetに対して、そのうちの1つのテーブルだけを更新するUpdateが可能(この辺はJittaさまの返信のお陰で確信が持てました)だとは確かに便利になったと思いました。

クラス名(やメソッド等)の命名には十分に気をつけるように警鐘していたのはマイクロソフトさんだと思いましたが・・・本末転倒ですねw

いろいろ勉強になりました。
みなさん、ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-08-05 21:47
引用:

ほえほえさんの書き込み (2008-08-05 10:30) より:
どうやら、DataViewがビューではなく、DataSet内のDataTableがビューとして扱われていて、それをテーブルと呼称していることが紛らわしかったようです。

クラス名(やメソッド等)の命名には十分に気をつけるように警鐘していたのはマイクロソフトさんだと思いましたが・・・本末転倒ですねw


 いえいえ、それはあなたの勘違いです。
DataSet 内のオブジェクトと、DBMS 内のオブジェクトを、混ぜて考えているからそう思われるだけです。
この二つを同じと考えてはいけません。あるいは、DataSet を DBMS のローカル コピーと扱いましょう。そして、DataSet に VIEW はなく、TABLE が存在しているだけです。
そうすると、DataView が、DBMS における TABLE に対する VIEW のように、DataTable の見方を表すものであることがわかるでしょう。


引用:

しかし、本当にジョインしたビューを表示させるDataSetに対して、そのうちの1つのテーブルだけを更新するUpdateが可能(この辺はJittaさまの返信のお陰で確信が持てました)だとは確かに便利になったと思いました。


 何と比較しているのかわかりませんが、VS.NET 2002 の頃から可能でしたけど?
というか、「ひとつのテーブルしか更新できない」ことに、不満があるのですけど。。。
(「データ-マスタ」で、マスタが複数あってもデータがひとつなら、更新できる。データ テーブルが複数のテーブルで構成されていたら、DataAdapter では更新できない。)

スキルアップ/キャリアアップ(JOB@IT)