• ベストアンサー

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

データベース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