• ベストアンサー

異なるDB間でのJOINやVIEWについて

Sybaseを使っています。  aaa  bbb の2つのDBを使っています(オーナーはともにxxx)。  DB名aaaには、a_tblが  DB名bbbには、b_tblがあるものとします。 ここで、例えばa_tblを検索したい場合、 use aaa go select * from xxx.a_tbl go で検索結果は得られると思いますが、 b_tblとのJOINを行いたい場合は use bbbの宣言も必要だと思うのですが、どうすれば可能でしょうか? また、あらかじめ、異なるDBにまたがるa_tblとb_tblを結合させたVIEWを 作成することは可能なのでしょうか? 可能であればその方法を教えてください。

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

  • ベストアンサー
回答No.3

異なるサーバーの表でJOINを行うには 「コンポーネント統合サービス」 を使います。Ver11.9 からデフォルトで使えます。 コンポーネント統合サービスを使うと違うサーバのDBが 自分のDBにあるテーブルのように扱えます。 ○パラメータ enable cis を 1 に変更 ○相手サーバを登録(interfaces,sql.ini&sp_addserver) ○こっちのログイン名と相手サーバ上のログイン名を対応させる(sp_addexternlogin) ○プロキシ・テーブルを作成(create existing table) Component Integration Services User's Guide に詳しく書かれていると思います。

yumi-mika
質問者

お礼

ありがとうございました。

その他の回答 (2)

回答No.2

DBの名前を from に含めます。 select * from db1.xxx.a_tbl a, db2.xxx.b_tbl b where a.key = b.key VIEW でも同じようにDB名からのテーブル名を 使えば大丈夫です。 まずはリファレンスマニュアルをしらべてみよう。 製品にCD-ROMで付属しています。 なければダウンロードもできます。

参考URL:
http://sybooks.sybase.com/asg1250j.html
yumi-mika
質問者

お礼

マニュアルがダウンロードできるの知りませんでした。。 ありがとうございます。 DBサーバーが異なる場合の記述がcreate viewの説明欄には見当たらなかったのですが、ご存知でしたらキーワードだけでも教えていただけないでしょうか。

noname#4564
noname#4564
回答No.1

  こっち↓の2つはほったらかしですか? [ トランザクション中に別のトランザクションは開始できますか? ] http://oshiete1.goo.ne.jp/kotaeru.php3?q=496981 [ 凝ったSQL文なのですが・・・ ] http://oshiete1.goo.ne.jp/kotaeru.php3?q=500467 失礼ですが、あなたは人間として社会生活上必要最低限のマナーを身に付ける方が先決です。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=496981,http://oshiete1.goo.ne.jp/kotaeru.php3?q=500467
yumi-mika
質問者

補足

もう少し待とうと思っていたのですが締め切りました。 書き込みありがとうございました。

関連するQ&A

  • 異なるDB間のテーブルをサブクエリにする事はできますか?

    「PostgreSQL」と「SQL Server」があり、aspで検索画面を作成しています。 PostgreSQL:Tbl_aaa(顧客No.、顧客名、住所、・・・) SQL Server:Tbl_bbb(顧客No.、契約日、契約金額、・・・) 上記のようなテーブルとフィールドがあるとして、どちらか一方の検索を行う場合は何も問題ありません。 例えば、契約日を検索条件に指定した場合、Tbl_bbbから一致した一覧が抽出されますよね。 抽出された結果を元に、Tbl_aaa.顧客No.=Tbl_bbb.顧客No.で再度抽出し、その結果を画面に表示させる。という事をやりたいのですがどうすればいいのかわかりません。 Tbl_bbbで検索を行い、画面表示の際にDo~Loopなどの中でTbl_aaa.顧客No.=Tbl_bbb.顧客No.となるものを表示させる。という方法を 考えましたが、(件数にもよりますが)結果が表示されるまでかなり時間がかかる為あまりよろしくありません。 そこで、異なるDB間のテーブルをサブクエリなどにする事はできないものかと思い、質問いたしました。 できるのであれば、どうすれば良いのか教えていただけないでしょうか。 できないのであれば、何か良い方法があればご教授下さい。よろしくお願いします。

  • JOIN句への変換

    はじめまして。 「*=」をJoin句に直したいのですが、同様の結果がえられません(T.T) SQL初心者です、どうぞよろしくお願いいたします。 この式をJOIN句に直したいです。 FROM A_TBL, B_TBL as B_TBL01, B_TBL as B_TBL02, C_TBL, D_TBL WHERE A_TBL.No = B_TBL01.No AND A_TBL.No = B_TBL02.No AND A_TBL.No = C_TBL.No AND A_TBL.No *= D_TBL.No AND C_TBL.ID *= D_TBL.ID AND ↓こうしたのですが、正しい結果がえられません。 FROM (D_TBL RIGHT OUTER JOIN C_TBL ON C_TBL.ID = D_TBL.ID) RIGHT OUTER JOIN A_TBL INNER JOIN B_TBL AS B_TBL01 ON A_TBL.No = B_TBL01.No1.No INNER JOIN B_TBL AS B_TBL02 ON A_TBL.No = B_TBL02.No2.No ON A_TBL.No = D_TBL.No AND A_TBL.No = C_TBL.No どうぞ、ご教授お願いいたします。

  • joinで前に文字を結合させる方法

    $a = join($aaa,@a); 文字を結合する時に、$aaaのあとに結合するのではなく、$aaaの前に結合させることはできるのでしょうか? もし、できないとしたら前に結合する方法のアドバイスを下さい。

  • DBを問わないSQLのチューニングが学べる本はありますか?

    以下のSQLはほぼ全てのDBで使用できると思いますが どちらが高速なのでしょうか?このような、 DBを問わずにSQL文に関する基礎的なチューニングが学べる本はありますでしょうか? (1)JOINを使わずに結合 select * from A,B,C WHERE A.a=B.a AND A.b =C.b (2)JOINを使用して結合 select * from A left join B on A.a=B.a left join C on A.b=C.b

  • テーブル結合の方法でのパフォーマンス

    テーブルを結合する順番でパフォーマンスが違ってくるものなんでしょうか。 FROM aaa, bbb aとbの順番を入れ替えるだけでパフォーマンスが変ることってあるんですかね。 また、カンマ(,)で結合を指定するよりSTRAIGHT_JOIN指定したほうが速いとか。 SELECT aaa.x, bbb.y FROM aaa, bbb; SELECT aaa.x, bbb.y FROM aaa STRAIGHT_JOIN bbb; おねがいします。

    • ベストアンサー
    • MySQL
  • Doctrineのjoinについて

    symfony+Doctrineで開発をしています。 他のプログラムは経験があるもののPHP初心者です。 2つのテーブルをjoinして、両テーブルの結果を取得します。 where句の条件どおりに行数を得られているので、 joinはできていると思います。 でも、結果を取得することが出来ません・・。 具体的には、joinしたテーブル(BTable)のカラムを取得しようとすると、 「Unknown record property / related component "value" on "ATable"」というエラーが出てしまいます。 (ATableにはvalueなんてないよ、って言っているみたいですが) ●ソースはこんな感じ $query = Doctrine_Query::create() ->select('a.name, b.value') ->from('ATable a') ->innerJoin('a.Btable b') ->where('b.id = ?', $id); $list=$query->execute(); foreach($list as $xxx){ print_r($xxx['name']); print_r($xxx['value']);←ここでエラー } ●エラーメッセージ Unknown record property / related component "value" on "ATable" そこで質問させてください。 ・xxx['value']の箇所は、どのように記述すればいいのでしょうか? ・もしくは、Doctrineではjoinしたテーブルの値は取得できないのでしょうか?  (webでいろいろ調べましたが、joinの例はあるものの、select結果を使う、といった例が見つかりませんでした・・) 方法がないのであれば、 あらかじめテーブルをjoinしたviewを作って、 それをselectするようにしようと思っています。 symfony+Doctrineに詳しい方がいらっしゃたら、 よろしくおねがいします。

    • ベストアンサー
    • PHP
  • PHP+MySQL 内部結合(INNER_JOIN)がうまく行きません。

    以下の文で「client_master」テーブルと「jobmaster0717」テーブルを内部結合させようとしているのですが、うまく行きません。どこがおかしいのでしょうか? <?php  // データベースサーバへの接続・データベースの選択  $db = mysql_connect('localhost','test','password');  $db_name = 'test';  mysql_select_db($db_name,$db);  // 処理対象テーブル  $tbl_name1 = "client_master";  $tbl_name2 = "jobmaster0717";    // 内部結合(INNER JOIN句)  $str_sql1 = "SELECT * FROM {$tbl_name1}"       . " INNER JOIN {$tbl_name2}"       . " ON {$tbl_name1}.company_ID"       . "  = {$tbl_name2}.client_ID;";  $rs1 = mysql_query($str_sql1,$db);  print "\"{$str_sql1}\"<br>\n";  // 結果セットの表示  show_rs($rs1,$db);  print "<br>\n";  // 結果セット(結果ID)の開放  mysql_free_result($rs1);    // データベースサーバの切断  mysql_close($db); ?>

  • unixのコマンドでSQLのようにJOINする

    unixのコマンドでSQLのJOIN(直積)と同じことをする方法はありますか? やりたいのは同じ結合キーが複数行ある場合です。 入力ファイル1(結合キーは1列目) 1,AAA 2,BBB 2,CCC 3,DDD 入力ファイル2(結合キーは1列目) 1,PPP 2,QQQ 2,RRR 出力結果 1,AAA,PPP 2,BBB,QQQ 2,BBB,RRR 2,CCC,QQQ 2,CCC,RRR 結合キー「2」は入力ファイル1にも入力ファイル2にも2行づつ存在するので SQLのJOINと同じように組み合わせのパターン全部を出力し、 結合キー「3」は入力ファイル2には存在しないので出力したくありません。 もし簡単なコマンドがなければawkやperlを使うしかないでしょうか・・・。 環境はHitachi系のunixだったと思います(うろ覚え) ちなみにこういう質問はこのカテゴリ(Linux系OS)で合ってますでしょうか。プログラミングと迷ったのですが・・・。

  • POSTGRESQLでのJOINの有無確認

    AとBの同じようなDBがあります。 AとBでJOINされたレコードの項目でJOINされたBのSUを AのSUと入れ替えたSELECTを作成したいです。 例) SELECT A.ID,?.SU,A.KIN FROM A LEFT JOIN B ON A.ID = B.ID ↑上記は、間違っています。 マッチした時、?.SUは、Bの内容で、 マッチしていない時は、?.SUは、Aの内容にしたいです。 又は、JOINされた有無を新項目名CON等をCASTして、JOINされたのは1、 JOINできていないのは、ゼロとかの設定でもOKです。 バージョンは、8.3です。 以上。

  • この場合 JOIN . SELECTはできますか

    JOIN.WHEREで...どなたかご教授下さい。 1)2つ以上のdatabase間でのtableの外部結合は出来ますか? やりたい事)実行環境は文末に記述しますが、1台目マシンのODBC(DSN1)でTABLE(A)とTABLE(B)を結合し、さらに2台目のODBC(DSN2)マシンのTABLE(C)を結合したい。 つまり、TABLE(A)+TABLE(B)+(TABLE(C)の状態にしたいのです。 まだ始めたばかりなので、上手く出来ませんでした。 可能・不可能も含めて、いい方法があったら教えて下さい。 実行環境) webサーバー : Apache 2.0.58 (winXP sp2) dbサーバー1 : DB2 UDB・・・ODBC接続 dbサーバー2 : MySQL・・・[MySQL][ODBC 3.51 Driver] [mysqld-5.0.22-community-nt] PHP : PHP Version 5.1.4