街中で見かけて「グッときた人」の思い出

皆様、お知恵を拝借させてください。

現在、SQLServer + VB.netで開発を行っていますが、どうしてもうまくいかないので悩んでいます。
ロジックを組めば解決できるのは、わかっているのですが、SQL文だけで解決したいのです。
よろしくお願いします。

やりたいことは、複数テーブルからの同一IDの抽出です。
IDで単一化
テーブル【現在】を優先して抽出
テーブル【履歴】のみ存在する場合、履歴NOの大きい方を抽出


テーブル【現在】
 ID 名前 趣味
------------------
 10 太郎 釣り
 20 次郎 ゴルフ

テーブル【履歴】
 ID 名前 趣味 履歴NO
-------------------------
 10 太郎 将棋 01
 10 太郎 囲碁 02
 30 花子 園芸 01
 30 花子 料理 02


求めたい結果は

10 太郎 釣り
20 次郎 ゴルフ
30 花子 料理

です。よろしくお願いします。

A 回答 (1件)

select ID,名前,趣味 from 現在


union all
select ID,名前,趣味 from 履歴 t1
where 履歴NO=(select max(履歴NO) from 履歴 t2
where t1.ID=t2.ID)
and not exists(select ' ' from 現在 where 現在.ID=t1.ID)
order by 1
です。
    • good
    • 1
この回答へのお礼

ありがとうございました。
私が求めていた答えが、見事に得られました。
納期が迫っていたので、大変助かりました。

お礼日時:2013/02/28 14:12

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

関連するカテゴリからQ&Aを探す