• ベストアンサー

DBをまたいで更新

現在、testDB1とtestDB2というDBが存在します。 それで、testDB1のtable.idとtestDB2のtable2.idを SELECT文で比較して、同じidの場合はtestDB2のtable2.dataに 1という値を格納したいと思っています。 それで、DBをまたいで更新するときの記述が分からず ネットで検索したのですが、うまくヒットしませんでした。 そもそもDBをまたいで問い合わせや更新等はできないのでしょうか? できない場合、代替の方法があったら教えて頂けますでしょうか。 よろしくお願い致します。

  • DHIN
  • お礼率73% (25/34)

質問者が選んだベストアンサー

  • ベストアンサー
noname#45409
noname#45409
回答No.2

スキーマ分けがいいと思いますが、現状そのような設計だとすると使いこなせない可能性も高いので・・・、もう一つ簡単な代替方法を。 データをプログラム側に渡してしまえば、その中で比較処理は出来ます。具体的には、table.idを配列で取るなり、他にも処理があるのであればオブジェクトで取るなりして、table2.idに対し、in句かループ文でupdateしていけばいいです。 ただし件数が多い場合はかなり処理が重くなる可能性があります。やる場合はデータ件数をきちんと考慮してくださいね。

その他の回答 (1)

回答No.1

DBをまたぐということはデータベースリンクでしょうか? だとしたら、PostgreSQLはデータベースリンクをサポートしていません。 もし、testDB1とtestDB2が同一サーバ内だとすれば データベースで区分けするのではなく スキーマ単位で分けた方がよいかと思います。 スキーマについては 参考URLを参照してください

参考URL:
http://www.buena-idea.net/~hironobu/postgresql/p-1-03.html

関連するQ&A

  • DB検索について

    (1)PHPにてSQLをコールしてテーブルから情報の取得を行いたいのです。  $cmnd = "select * from table_a where id=01";を実行し(fetch使用)  仮に15件セレクトされたとすると、抽出された15件は  プログラム内のどこに格納されるのですか? (2)また、そのレコードを順じ処理する場合において、終了条件はどの様に  判定したら良いでしょうか?  DB:oracle

    • 締切済み
    • PHP
  • ASPより入力した値をDBへ問い合せしExcelに・・・。

    ASPのテキストボックスにて入力した値で、DB(Oracle)のテーブルへ 問い合せを行い、結果をExcelの定型シートに入れ込みたいのですが方法が 解りません。 1.DBへの問い合せの記述方法。 2.取得した値をExcelのシートへ入れ込む記述 申し訳ありません。初心者なのでなるべく丁寧に教えてください。

  • identityの値の変更/自動更新について

    MySQLからWindowAzureに移行しています。 1.identityが設定されている値の変更 auto_incrementが使えないようなので、identityを使用して下記のテーブルを作成しました。 ですが、identityだと更新ができないので困っています。 CREATE TABLE test ( id int NOT NULL identity, text nvarchar(255) NOT NULL, PRIMARY KEY (id), ); データの追加に関しては、IDENTITY_INSERTをONにすることでできますが、更新時はどうすればよいでしょうか? データの追加の場合は、使用の際上記のように、毎回ONにする必要がありますか?(DB接続時にONにしてしまえばよい/テーブル作成時に記述で可能ではない?) 複数個所から更新をするので、すべての箇所に記述するのは可能な限りしたくありません。 2.データの自動更新 テーブルを更新した際に、データを自動で更新したいのですが、mysqlでは on update で可能ですが、 SQLAzureでは、下記のSQLをどのように記述すればよいでしょうか? create table time( id int not null, time1 datetime NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY(id) ); よろしくお願いします。

  • テーブルレーコードをソートして更新するにはどうしたらいいでしょうか?

    社内向けシステムDBの更新作業を行っています。 システム上ではテーブルレコードがコンボボックスの形で 格納順に表示されてしまいます。 ただこの表示順がカテゴリー順になっていないのでとても選択しにくいです。 そこでレコードをカテゴリー順に並びかえテーブルを更新したい(SELECTで並び替えた状態で更新したい)のですがどうやればよろしいでしょうか?

  • MySQL初心者

    -mysql CREATE DATABASE testdb; use testdb; CREATE TABLE car_table(id int(10),name varchar(50)); INSERT INTO car_table VALUES (2,'乗用車'); INSERT INTO car_table VALUES (3,'オープンカー'); INSERT INTO car_table VALUES (4,'トラック'); SELECT * FROM car_table; これで間違ってるとは思わないんですが、なぜか ERROR 1049(42000): Unknown database 'testdb・・ とでます。なぜなんでしょうか?全然わかりません。 何かの設定ミスかなにかでしょうか?

    • ベストアンサー
    • MySQL
  • 同テーブルで指定カラム値を相互更新(入替)したい

    下記のようなカラムがある時、DBから取得した値を、引数(並べ替え順)に応じて、(同じカラムを)更新するSQL文を教えてください ●カラム id1 sex1 age1 id2 sex2 age2 id3 sex3 age3 id4 sex4 age4  ●引数例 3 1 2 ※1番目が3、2番目が1、3番目が2 ・「1の数字が付いたカラムの値」を、「3の数字が付いたカラムの値」で更新したい ・「2の数字が付いたカラムの値」を、「1の数字が付いたカラムの値」で更新したい ●質問 ・MySQLだけで処理可能でしょうか? UPDATE テーブル名 SET id1=(SELECT id3 FROM テーブル名 WHERE id1=id3値),sex2=(SELECT sex3 ……; ・それとも、一度、全ての値を取得して、PHP等で処理するのでしょうか? UPDATE テーブル名 SET id1=id3値,sex1=sex3値,age1=age3値,id2=id1値 ……; ・他に何か良い方法はあるでしょうか(一旦別テーブル作成後、戻す等) ●環境 MySQL5.1

    • ベストアンサー
    • MySQL
  • アクセス テーブルデータ他のテーブルにコピーVBA

    win10 access365のmdbファイルにおいて table1のフィールド1がID 数値型 長整数型 値要求あり 重複あり フィールド2が氏名 短いテキスト型 225 値要求なし 重複あり  table2;フィールド1がID 数値型 長整数型 値要求あり 重複あり フィールド2が氏名 短いテキスト型 225 値要求なし 重複あり  上記に置いて table2の新しいデータとして table1のデータをコピーしたい、 ただしtable1には レコードは1行だけとします (table1にレコードが複数行ある場合の最新レコードだけtable2にコピーも出来れば知りたいです) アクセス付属の更新クエリーでは、どうも うまくいきません sqlにおいて UPDATE table1, table2 SET table2.ID = [table1]![ID], table2.氏名 = [table1]![氏名]; 上記動作しません Function table1から2() Dim db As DAO.Database Dim rst As Recordset Dim TB As Table Dim Rdset As Recordset On Error Resume Next Set db = DBEngine(0)(0) Set Rdset = db.OpenRecordset("table2", DB_OPEN_TABLE) Rdset.AddNew Rdset![ID] = Table![table1]![ID] Rdset![氏名] = Table![table1]![氏名] Rdset.Update End Function table1, table2を それぞれ 同名のフォームを作り Function table1から2() Dim db As DAO.Database Dim rst As Recordset Dim fm As Form Dim Rdset As Recordset On Error Resume Next Set db = DBEngine(0)(0) Set fm = Forms![table1] If Rdset.BOF Then Exit Function Else Set Rdset = db.OpenRecordset("table2", DB_OPEN_TABLE) Rdset.AddNew Rdset![ID] = Forms![table1]![ID] Rdset![氏名] = Forms![table1]![氏名] Rdset.Update End If End Function いずれも table2のデータ更新が なされていません すみません 宜しくお願い致します

  • PHPからMySQL・異なるDBにコピー

    PHPからMySQL・異なるDBに接続し同じ構造のテーブルのデータをコピーすることは可能ですか? 以下を実行するとクエリが実行されず「コピーできません」が表示されてしまいます。 どのようにすればコピーできるか教えてください。 $connect1 = mysql_connect("localhost", "user1", "pass1") ; mysql_select_db("db1", $connect1); //db1内にtable1 $connect2 = mysql_connect("localhost", "user2", "pass2") ; mysql_select_db("db2", $connect2); //db2.内にtable2 $sql = "INSERT INTO `db1` . `table1` SELECT * FROM `db2` .`table2`;"; $result = mysql_query($sql, $connect1)or die("コピーできません"); //$result内「$connect1」でも「$connect2」結果は同じです。 //table1とtable2の構造は同じです。

    • ベストアンサー
    • PHP
  • DBの表の内容を全取得したい(PDO)

    DBおよびPG初心者です。 単語や説明に不備がありましたらご指摘下さい。 DB内の各テーブルをブラウザで視覚的に確認するために 選択したテーブルの内容を取得したいと思っております。 DB各種に汎用的に使えるPDOモジュール(?)を使用。 ■ DBMS上にあるDB数と各々のDB名を取得(配列に格納される?) するにはどのように記述すればよいでしょうか。 ■ DB内のテーブル数と各々のテーブル名を取得(配列に格納される?) するにはどのように記述すればよいでしょうか。 ■ テーブルのカラム数はcolumnCount()で取得することができたのですが、 それぞれのフィールド名はどのように取得すればよいのでしょうか。 ご教示の程よろしくお願い致します。

    • 締切済み
    • PHP
  • PHP5+MySQLで現在日時とDB内の開始日時と終了日時との比較の方

    PHP5+MySQLで現在日時とDB内の開始日時と終了日時との比較の方法を教えてください。 table_a id start end ----+--------------------+---------------------+ 001 2010-01-01 10:00:00 2010-01-03 18:30:00 002 2010-01-01 12:00:00 2010-01-05 20:00:00 ・ ・ というデータがある時、 現在の日時がid:001のstartとendの間だったら1、 start前だったら0、endより後だったら2の値を表示させるにはどうしたらいいのでしょうか? $sql = "SELECT A.id ,A.start ,A.end FROM table_a A WHERE A.id = ".$id." "; $result = mysql_query($sql); で取得して time()などと比較すればいいとは思ってますが、DBから持ってきた日付との比較方法がわかりません。

    • ベストアンサー
    • PHP