• ベストアンサー

データベースの結合について

データベースAとBがあり。 データベースAには基本となるデータが入力されています。 id name flag a test 0 b aaaa 1 c ghic 0 データベースBにはデータベースBと同様のIDが入っています。 id pre a ddd このようなデータベースの場合、データベースBに入っているものを 1として表示したい場合はどのようなSQL文にしたらいいのでしょうか?? 出力したいDB例 id name flag b_flag a test 0 1 b aaaa 1 c ghic 0

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

  • ベストアンサー
  • sawagani
  • ベストアンサー率73% (19/26)
回答No.6

PostgresSQLは使ったことないですけど、case文は使用可能でしょうか? taka451213さんのSQLを実行すると、b_flagには、 テーブルBに存在しない場合・・・null テーブルBに存在する場合・・・null以外の値(id) が表示されると思います。 ここで、null以外のものを1に変更します。 SELECT A.id, A.name, A.flag, CASE WHEN B.id IS NULL THEN 0 ELSE 1 END AS b_flag FROM A LEFT JOIN B ON A.id = B.id こんな感じでできないでしょうか? (Bテーブルに存在しないものは0として表示されます) 試してないので怪しいですけど…。

aiurai54
質問者

お礼

無事に1と0を表示することができました。 ありがとうございました。

その他の回答 (5)

回答No.5

こんばんは。 取得結果はどんな感じになりました? 外部結合になってませんでしたか? b_flagのカラムにBのidが(あれば)出てきてると思うのですが・・・。 テスト環境がないので自信ないですけど・・・。 (^^ゞ

aiurai54
質問者

お礼

b.idのカラムは出てきました。ありがとうございます。

回答No.4

こんにちは。 PostgreSQLのSQLを調べてみました。 SELECT A.id, A.name, A.flag, B.id as b_flag FROM A LEFT JOIN B ON A.id = B.id これでどうですか?自信ないです・・・ (^^ゞ

aiurai54
質問者

お礼

以前も丁寧に教えていただきましたよね? ありがとうございます。 上記の方法で試してみたのですが、、、 フラグを立てることはできませんでした。

回答No.3

こんにちは。 PostgreSQL自体はよくわかってないのですが・・・、 ここでおっしゃってるデータベースというのは、テーブルレベルですか? スキーマレベル? データベースのインスタンス自体が別物(DBLINKが必要)というレベルですか? 例えばテーブルA.Bがあった場合、Bにも存在するかどうかを判定するだけなら、 SELECT A.id, A.name, A.flag, B.id as b_flag FROM A, B WHERE A.id = B.id(+) ORACLEのSQLです・・・。 これでテーブルAとBの両方に存在する「id」だけが「b_flag」に出力されます(BになければNULL)。 PostgreSQLのSQLが書けないので、他の方にお任せします。 また、テーブルレベルでない場合(スキーマやデータベースインスタンス)、そのように置き換えてください。 それから出力が「B.id」なので、「0or1」に変更(OracleではDECODEなどを使いますが・・・)してください。 以上参考まで・・・。 (^^ゞ

aiurai54
質問者

補足

すみません。データベースではなくテーブルです。 テーブルAとテーブルBという形になります。 上記のようにやってみましたが、うまくいきませんでした。。。 やはり、オラクルとは少し違うようですね。 ありがとうございました。

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

よく読むと全然違ってました。 > データベースBに入っているものを1として表示したい これどういう意味ですか?

aiurai54
質問者

補足

DB(A) id name flag a test  0 b aaaa  1 c ghic  0 DB(B) d pre a ddd 結合後のDB d name flag b_flag a test 0 1 b aaaa 1 c ghic 0 表示の仕方が悪かったです。 上記のようにデータベースBにあるものを b_falg = 1となるようにしたいのです。 ないものは0でもNULLでもかまわないのですが。。。

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.1

SELECT id,name,flag,(SELECT pre FROM B where id=A.id) as 1 from A

関連するQ&A

  • テーブル結合

    度々お世話になっています。 Mysqlのテーブル結合したいと思ってます。 テーブル構成は以下のとおりですのでご参照ください。 ■テーブルA id | name 1 | bind 2 | samba 3 | apache ■テーブルB id | detail 3 | test 3 | test 1 | test ■結合結果 id | count 1 | 1 2 | 0 3 | 2 テーブルA,Bはidコラムで紐づいています。 この際、テーブルBのidごとにレコード数を出力したいのですが、 どういったSQLを流せば良いでしょうか。 ご教示願います。

    • ベストアンサー
    • MySQL
  • 複数のデータベースを使う場合

    php4 + MYSQL4.0.2で作業しています。 1つのサーバーにある、複数のデータベースに接続する方法を教えてください。 DB1:テーブルhoge(ID、name) DB2:テーブルhogehoge(ID, hogeID, comment) このような場合、データベースが全てDB1に入っているとすれば、 $con = mysql_connect(host, user, pass); sql="SELECT name, comment" . " FROM hogehoge INNER JOIN hoge ON hogehoge.hogeID = hoge.ID"; $rst = mysql_db_query(DB1, $sql, $con); $col = mysql_fetch_array($rst); print($col['name'] . $col['comment']); となりますが、 テーブルhogeとhogehogeが、異なるデータベースに存在する場合はどのようにすればよいのでしょうか? 以上、よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 2つのテーブル結合

    Oracle10g使用しています。 テーブルAとテーブルBを結合させてデータを取得したいと思っています。 [テーブルA] ID name 1 A 2 B 3 C 4 D [テーブルB] ID SEQ VALUE 1 1 111 2 1 222 2 2 333 3 1 444 4 1 555 4 2 666 4 3 777 テーブルAのキーは[ID]、テーブルBのキーは[ID,SEQ]です。 この二つを連結して以下のように出力したいと思っています。 ID SEQ NAME VALUE 1 1 A 111 2 2 B 333 3 1 C 444 4 3 D 777 テーブルBのデータは同じIDのうち最大のSEQのものを取得したいのですが よいSQLが思いつきません。 よい方法があればご教授ください。 よろしくお願いいたします。

  • 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); ?>

  • データ結合について。

    皆さん教えてください。 SQL初心者です。 下記のファイルを用いて最終結果をだしたい。 SQL文を教えてください。 A-FILE CD,ID-A,NAMEID-A,ID-B,NAMEID-B 10,35,060,36,01 11,35,062,36,01 12,35,062,36,02 13,35,060,36,02 B-FILE ID,NAMEID,NAME 35,060,AAA 35,062,BBB 36,01,CCC 36,02,DDD となっています。 今回、上記のファイルをしようして。 A-FILEを元に。結果を下記のようにしたい。 11,35,060,AAA,36,01,CCC 12,35,062,BBB,36,01,CCCといった具合にほしい。 よろしくお願いいたします。

  • テーブルを結合

    テーブルの結合に関して質問します。 ネットなどでinner joinを使った複数のテーブル結合が参考として 書いてあったのですが(3つまで), 4つテーブルを結合する事は 出来るのでしょうか? A,B,CテーブルにはID,NAMEがあります。 DテーブルにはA,B,CテーブルのIDがあります。 参考サイトを見て3つのテーブルを結合するSQLが以下になります。 SELECT a.name, b.name, c.name FROM a INNER JOIN (b INNER JOIN c ON b.id = c.id) ON a.id = c.id よろしければアドバイスお願いします。

  • 複数のデータベース使用方法

    tora0125と申します。よろしくお願い致します。 データベース:SQLServer2000とSQLServer2005CTP 開発:VisualStadio.NET2003 言語:C# データベースDB_AとDB_Bというものがあり、随時アクセスするデータベースを変更したいと思っております。 cn.ConnectionString = "Data Source=LOCAL" + "; User Id=TEST" + "; Password=TEST" + "; initial catalog=DB_A" + "; persist security info=True;"; 上記のようにコネクションの設定を行っております。主となるデータベースはDB_Aです。 その後、必要となったときにDB_Bにコネクションを変更する方法をどなたかご教授下さい。 拙い文章でわかりずらい箇所があると思いますが、どうぞよろしくお願い致します。 カテゴリー違いでしたら申し訳ございません。

  • SQLでテーブルを結合した結果を取り出し

    SQLで以下の様なテーブルがあります。 tableA、tableB、tableCを使って、IDとNUMとRANKを結合し、 ID毎に、 RANKが1つでもあったら、”○”でその数を RANKが1つもなかったら、”×”で0を 取り出したい。 「oracle10g」です。 -- tableA ID,NUM,NAME,・・・・・ 000001,001, 000001,002, 000001,003, 000002,001, 000003,001, 000003,002, -- tableB ID,NUM,RANK 000001,001,A 000001,001,B 000001,001,C 000001,002,A 000001,003,C 000002,001,B 000002,002,B 000003,001,A 000003,002,A 000003,002,C --tableC RANK,NAME A, B, C, 結果として、 ID,RANK,判定,個数 000001,A,○,2 000001,B,○,1 000001,C,○,2 000002,A,×,0 000002,B,○,2 000003,A,○,2 000003,B,×,0 000003,C,○,1 を得たいです。 どのようなSQLにしたらよいか、よろしくお願いします。

  • SQLiteのデータベースについて

    PHP初心者です。以下のSQLiteより作成するデータベースについて教えてください。 $DB = sqlite_open('db1.db'); $sql="create table tables(id integer ,name,texts)"; $result=sqlite_query($db,$SQL); 上記、プログラムにより、同ディレクトリに、db1.dbが作成されますが、このデータベース情報はどのようにして、閲覧するのでしょうか(MS-ACCESS、SQLのように簡単に閲覧できないのか)。主キーやテーブルの名前またはフィールドの名前の変更、データ一覧閲覧などどのようにするのでしょうか。 環境は、Windows環境で、PHP4を使用しております。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • SQL文の質問

    DBの検索で AAAというデータベースで user_id,log_no,status と項目があって、 user_idとlog_noでプライマリーキーで 検索する条件が 同一user_idが複数件ある場合のみ、 log_noが0のuser_idだけ検索したいという SQL文を教えてください。 たとえば、DBには user_id log_no status 'aaaa1' 0 0 'aaaa2' 0 0 'aaaa2' 1 0 'aaaa3' 0 0 'aaaa3' 1 0 とはいっていたら、 'aaaa2' 0 0 'aaaa3' 0 0 の2件だけSELECTできるSQL文は可能でしょうか? すみません。 どなたか宜しくお願いします。