• ベストアンサー

SELECT(結合)について

次のような操作がしたいのですが、 TestOya t1 t2 1 A 2 B TestKo1 k11 k12 k13 1 1 AA 1 2 BB 2 1 CC TestKo2 k21 k22 k23 1 3 AAA 1 4 BBB 1 5 CCC 2 2 DDD 取得したい結果 t1 t2 betumei1 betumei2 betumei3 1 A 1 1 AA 1 A 1 2 BB 1 A 1 3 AAA 1 A 1 4 BBB 1 A 1 5 CCC 2 B 2 1 CC 2 B 2 2 DDD betumei1には、k11またはk21 betumei2には、k12またはk22 betumei3には、k13またはk23 となるような結合がしたいのです。 アドバイスあれば宜しくお願いします。

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

  • ベストアンサー
  • FizzBuzz
  • ベストアンサー率100% (1/1)
回答No.2

こんな感じでしょうか WITH TestKo12(betumei1, betumei2, betumei3) AS (   SELECT k11, k12, k13 FROM TestKo1   UNION ALL   SELECT k21, k22, k23 FROM TestKo2 ) SELECT   t1,   t2,   betumei1,   betumei2,   betumei3 FROM TestOya INNER JOIN TestKo12  ON t1 = betumei1 > やはり、unionを使うことでしか対応できないのでしょうか? UNIONを使うと拙いことでもあるのでしょうか どうしてもUNION以外で実現したいのであれば、到底お勧めできませんが・・・ WITH TestKo12(betumei1, betumei2, betumei3) AS (   SELECT     COALESCE(k11, k21),     COALESCE(k12, k22),     COALESCE(k13, k23)   FROM TestKo1   FULL OUTER JOIN TestKo2    ON NULL IS NOT NULL -- ありえない条件 ) SELECT   t1,   t2,   betumei1,   betumei2,   betumei3 FROM TestOya INNER JOIN TestKo12   ON t1 = betumei1 二つ目は実装環境によっては期待通りの結果に成らない可能性もあります インデントは全角スペースで入れているので、コピーして実行する場合は 半角スペースに置換して試してください

kensiroooo
質問者

お礼

ありがとうございます。 参考にさせていただきます。

その他の回答 (1)

回答No.1

もっと丁寧に、やりたいことを説明しましょうよ。 各行を一意に識別するキーはどれで、どれとどれで結合するとか、提示されたデータだけで推測するというのは、アドバイスをしようとする側にとっても時間が掛かりますし、せっかくアドバイスしたものが質問者さん側の意図したものと違ったりということもありますし。 ここのカテゴリ通り、RDBMSはSAQL Serverですか? バージョンは? TestKo1表とTestKo2表をunionで繋げ、それをTestOyaとjoinすればいいのでは?

kensiroooo
質問者

お礼

返事ありがとうございます。 RDBMSは、SQLSERVERとなります。 バージョンは、2005です。 TestOyaテーブルのt1とTestKo1のk11との等価結合、および TestOyaテーブルのt1とTestKo2のk21との等価結合の結果を 一覧表示したいのです。 やはり、unionを使うことでしか対応できないのでしょうか?

関連するQ&A