- ベストアンサー
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 となるような結合がしたいのです。 アドバイスあれば宜しくお願いします。
- みんなの回答 (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 二つ目は実装環境によっては期待通りの結果に成らない可能性もあります インデントは全角スペースで入れているので、コピーして実行する場合は 半角スペースに置換して試してください
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
もっと丁寧に、やりたいことを説明しましょうよ。 各行を一意に識別するキーはどれで、どれとどれで結合するとか、提示されたデータだけで推測するというのは、アドバイスをしようとする側にとっても時間が掛かりますし、せっかくアドバイスしたものが質問者さん側の意図したものと違ったりということもありますし。 ここのカテゴリ通り、RDBMSはSAQL Serverですか? バージョンは? TestKo1表とTestKo2表をunionで繋げ、それをTestOyaとjoinすればいいのでは?
お礼
返事ありがとうございます。 RDBMSは、SQLSERVERとなります。 バージョンは、2005です。 TestOyaテーブルのt1とTestKo1のk11との等価結合、および TestOyaテーブルのt1とTestKo2のk21との等価結合の結果を 一覧表示したいのです。 やはり、unionを使うことでしか対応できないのでしょうか?
お礼
ありがとうございます。 参考にさせていただきます。