• 締切済み

 テーブルA(主キー有り)とテーブルB(主キー有り)をLEFT OUT

 テーブルA(主キー有り)とテーブルB(主キー有り)をLEFT OUTER JOINで外部結合したテーブルが 読み取り専用になっていて、データの更新ができないのですが、更新出来る方法が解らずに、困っていま す。この結合したテーブルのデータを更新できるようにするにはどのようにすればよいのでしょうか、お助け 願います。 SQL SERVER 2008 EXEPRESS EDITION をインストールしたPCからSQL 2000 serverのデータベースに アクセスしています。

  • owll
  • お礼率40% (2/5)

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

>1 とは基のテーブルということですよね う~ん、少し違う。別に基がnで、従が1もありえます。 主キーを結合条件にしている方が1です。だって、重複 しないわけですからね。但し、従側の場合は結合しない、 即ち、実体が無いことがあるため、更新できません。 やっぱり、一時テーブルに抽出して、主キーによる INNER JOIN を考えるほうが間違いないですし、少し 複雑な処理にも応用できるので、こちらを勧めたいですね。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

>JOINで外部結合したテーブルが こういうのはクエリと言って、テーブルではありません。 クエリが更新可能になるのは1:1か1:nの1側だけです。 主キー以外で結合すると、この関係を保証できないので、 たいてい、更新不可能です。 一時テーブルを駆使してこの関係を構築するようにします。 何も掲載がないので、これ以上は答えようがありません。

owll
質問者

お礼

ありがとうございます。 すみません。テーブルとクエリを良く分かってない状態での 質問で、テーブルを結合した場合にできるのは、クエリということ がわかりました。「1:1か1:nの1側だけです」 ということは、今回はテーブルを結合した場合の1:nに当たるわけですよね、  1 とは基のテーブルということですよね。このクエリの基側の部分の列は 更新できるということですよね。これからやってみたいと思います。 アドバイスありがとうございました。

関連するQ&A

  • 外部から取り込んだテーブルに主キーを設定するには

    外部から取り込んだテーブルに主キーを設定するには sql server 2000 のデータベースにsqlserver 2008 express editionをインストールしたPCで別のデータベースのテーブルをインポートウィザードにて取り込み、そのテーブルに主キーを設定しようと、新しいログイン名で-ログイン-セキュリティ-ユーザー-プロパティの画面でセキュリティ保護可能なリソースを選択し、オブジェクトの列の権限にて更新、選択、等許可に設定しても、テーブルの変更が(主キーの設定)ができません。 この変更は、もともと無理なことなのでしょうか。そうだとしたら他にテーブルの列設定を変更する方法はないのでしょうか どうかご教授お願いします。宜しくお願いします。 PC os XP pro (sql server 2008 express edition) サーバー WINDOWS 2000 server SQL server 2000

  • 外部キーだけのテーブル(主キーがない?)

    データベースのテーブルについておたずねします. 主キーがなくて,そのかわりに外部キー(と主キー以外の列)しか持たない テーブルも可能だと聞きました. テーブルには主キーが必ずあるものだと思っていましたが, どのような使いかたをするのでしょうか. どうやら,最初からデータがあるわけではなく, 追加されるタイミングがわからないデータを格納する場合に作っておく, ということらしいのですが,なんのことかよくわかりません. データベース関連書籍をいくつか調べましたが, 主キーのないテーブルの説明などは見当たりません. また,この悩ましい問題を与えてくれた知り合いに訊ねましたが, テーブル構成などの具体的なことは, 企業内のことなので,教えてもらえませんでした. 何か具体的な例を交えながらご説明いただければと思います.

  • テーブルに主キーを作らないデメリットは?

    アクセスのテーブルを作るにおいて 主キーのフィールドを作らなかった場合、 どのようなデメリットや不都合がありますか? 既にいくつか主キーのないテーブルを作ってしまいました。 このまま運用しようか主キーを作るべきか悩んでいます。 SQLサーバーに移行する場合などにエラーになるのでしょうか?

  • 複数の外部結合

    こんにちは、外部結合の仕方についてお聞きしたいのですが、 このSQL1で抽出されたデータにさらに TABLE3テーブルのデータを追加したくSQL2を作成したのですが、 うまくいきません。 ON TABLE1.[Code]=TABLE3.[Code]の部分をどのように記述すればよいのでしょうか? SQL1--------- TABLE1.[tamp] [Child], TABLE2.* FROM [p].[Price] TABLE1 LEFT OUTER JOIN [p].[Receive] TABLE2 ON TABLE2.[Code]=TABLE1.[Code] SQL2---------- TABLE1.[tamp] [Child], TABLE2.*, TABLE3.* FROM [p].[Price] TABLE1 LEFT OUTER JOIN [p].[Receive] TABLE2 ON TABLE2.[Code]=TABLE1.[Code] LEFT OUTER JOIN [p].[Product] TABLE3 ON TABLE1.[Code]=TABLE3.[Code]

  • 同じ構成のテーブルを結合する

    AとBという全く同じ列構成からなるテーブルの結合を考えています。 イメージとしては、Aのレコードが全て表示された下にBのレコードが列挙されるような感じです。 "INNER JOIN"、"LEFT OUTER JOIN"で行った結果、AとBでキーに同じ値を持つと、どちらかの値で上書きされてしまうみたいなのでイメージ通りにはいきませんでした。また、"CROSS JOIN"ではAの右側にBの内容が追加されてしまうのもあって、イメージ通りにできませんでした。 どなたかこのSQL文が分かる方はお教えいただけないでしょうか? よろしくお願いします。 データベース:SQL Server

  • SQL 主キーによる自動的な表の結合

    複数の表を主キーで結合する際、そのままWHERE句に条件を列挙するのが普通ですが、 主キーの数が多いので、これを簡単に記述方法はないでしょうか? できれば Natural Join のようにテーブル名のみを記述し、 DBMS(Oracle)が主キーのみを自動的に結合してくれればベストです。 Natural Join を使用できない理由の1つは、複数の表に登録日という列があり、 Natural Joinすると主キーでない登録日まで結合してしまうからです。 SQLは次のようになっています SELECT * FROM TBL_A NATURAL JOIN TBL_B NATURAL JOIN TBL_C ... ※join using, join on 句は使用できないようです。 ※登録日の列名は変更できません。 Oracle Database 9.2.0.4

  • 主キー、インデックスが作成できない

    お世話になります。 SQLserver2000とACCESS(フロント)で使っております。 主キーもインデックスも設定していなかったテーブルに エンタープライズマネージャから主キーを設定しようとしたのですが、保存しようとすると以下のエラーが出てしまいます。 もともと更新クエリを作成したのですが、”更新可能なクエリであることが必要です。”とエラーが出てしまい、いろいろ調べるうちに主キーを設定していないから??と思い、設定しようとしたのですがうまくいきません。。宜しくお願いします。 ■エラー内容 テーブル 'テーブル名 (ユーザー名)' - インデックス 'インデックス名' を作成できません。 ODBC エラー : [Microsoft][ODBC SQL Server Driver][SQL Server]インデックス ID 1 で重複したキーが見つかったので、CREATE UNIQUE INDEX は終了しました。もっとも重要な主キーは 'XXXX-00XXXX-00-A1 ' です。 [Microsoft][ODBC SQL Server Driver][SQL Server]制約を作成できませんでした。以前のエラーを調べてください。 [Microsoft][ODBC SQL Server Driver][SQL Server]ステートメントは終了されました。

  • Left outer join とかのLeft

    Left outer join とright outer join ですが、解説などをみると、左右に表が描かれてあって、線を引いたりして結合していくのですが、 何をもって左とか右とかいうのでしょうか? テーブル1が左で、テーブル2が右みたいな感じで解説されるのですが、先に出てきた1も、あとに出てきた2も、単に出てきた順番であり、記号と思われます。1と2を入れ替えたら同じことです。Left outer join Table1 もRight outer join Table2 も同じことのように思われます。私はなにか勘違いしているのでしょうか?

  • SQL の主キーについて

    次のページで・・・ https://rfs.jp/sb/sql/s03/03_3.html "各テーブル間のリレーション"というところに図がありますが、商品テーブル、顧客テーブルの商品ID、顧客IDはそれぞれ主キーである必要はあるのでしょうか? ユニークであることは前提ですが。 Access, SQL Serverで考えています。

  • sqlservrのシステムテーブルから主キー判定

    sqlservrのシステムテーブルのから主キーの判定を行いたいです。 sysobjects(type='U')でテーブル情報があり、それに紐付くsyscolumnsの項目情報があるとします。 テーブル名,項目名 tbl1,item1 tbl1,item2 tbl1,item3 tbl2,item1 tbl2,item2 これは、 select obj.name as "テーブル名" , col.name as "項目名" from sysobjects obj left join syscolumns col on obj.id = col.id where obj.type = 'U' で取得できますが、 さらに、主キーの項目には○をつけたいです。 テーブル名,項目名,主キー tbl1,item1,○ tbl1,item2,○ tbl1,item3,null tbl2,item1,○ tbl2,item2,null sysindexkeysやsysindexesの情報を引っ掛ければなんとかなるかと思いましたが、何ともならずにGive UP状態です。 システムテーブルを結合して取得する方法はありますでしょうか?