アプリ版:「スタンプのみでお礼する」機能のリリースについて

次のような操作がしたいのですが、
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
となるような結合がしたいのです。

アドバイスあれば宜しくお願いします。

A 回答 (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

二つ目は実装環境によっては期待通りの結果に成らない可能性もあります
インデントは全角スペースで入れているので、コピーして実行する場合は
半角スペースに置換して試してください
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/10/20 21:50

もっと丁寧に、やりたいことを説明しましょうよ。


各行を一意に識別するキーはどれで、どれとどれで結合するとか、提示されたデータだけで推測するというのは、アドバイスをしようとする側にとっても時間が掛かりますし、せっかくアドバイスしたものが質問者さん側の意図したものと違ったりということもありますし。

ここのカテゴリ通り、RDBMSはSAQL Serverですか?
バージョンは?

TestKo1表とTestKo2表をunionで繋げ、それをTestOyaとjoinすればいいのでは?
    • good
    • 0
この回答へのお礼

返事ありがとうございます。

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

お礼日時:2009/10/15 19:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!