- PR -

Oracleでの副問い合わせで教えてください!

1
投稿者投稿内容
KOH♪
会議室デビュー日: 2008/07/31
投稿数: 16
お住まい・勤務地: 名古屋市
投稿日時: 2009-02-23 15:14

こんにちは。
現在、Oracle11g,VB.netにて在庫管理システムを開発しております。

今回教えていただきたいのは、
『結合する表Aに、表Bの”最新の日付”の1行を表Aに結合したい』

少々表現に乏しいので下記に記します。

-------------------------------------------------------------------
Select A.品名, B.日付 from 品名マスタ A
Left join (select Top1 B.日付 from 登録データ B order by B.日付)
on A.ID = B.ID
WHERE B.ID LIKE @id

※本SQLは複数行を返すことを想定しております。
-------------------------------------------------------------------

ここで副問い合わせの中にOrder句があります。
本来エラーとなりますが、私のやりたい事が伝わりやすい
のではないかと考え記述しました。

よろしくご教授下さい。



King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-02-23 15:41
コード:

SELECT
    A.ID,
    B.日付
FROM
    品名マスタ A,
    (
    SELECT
        ID,
        日付,
        MAX(日付) OVER (PARTITION BY ID) MAX日付
    FROM
        登録データ
    ) B
WHERE
    A.ID = B.ID
    AND
    B.日付 = B.MAX日付
    AND
    A.ID LIKE @id


でどうでしょうか。
(実行していないので上手くいかなかった場合はすみません。)
ただし両テーブルに同じ ID のレコードが必ず存在し、
登録データに ID と日付の組み合わせが重複するレコードが無い場合です。
そうでない場合は少し手を加えれば出来ると思います。
KOH♪
会議室デビュー日: 2008/07/31
投稿数: 16
お住まい・勤務地: 名古屋市
投稿日時: 2009-02-23 16:06
Kingさん、108さん 素早い御回答ありがとうございます。

Knigさんへ
頂いた方法を試してみます。
ありがとうございます。
結果をまた報告します。

109さん
説明不足だったようですみません。
表を外部結合したかったのです。外部結合の中でも、
双方の表で1行=1行のjoinを実現するため
副問い合わせのB表の結果を1行にする方法に
苦慮しておりました。

ご返答ありがとうございました。
108
常連さん
会議室デビュー日: 2007/12/12
投稿数: 45
投稿日時: 2009-02-23 16:16
消してしまいました・・・

以下一部再現します。
引用:
『結合する表Aに、表Bの”最新の日付”の1行を表Aに結合したい』



行ですか?列ではないですか?
行ならJOINではなくむしろUNIONかなと。
※言葉の意味を取り違えました。すみません。


データ例と、欲しい結果表を提示したほうが回答しやすいかもしれません。

上記のようなことを投稿していました。


引用:
109さん


煩悩の数もひとつ増えるとイメージ変わりますねw

[ メッセージ編集済み 編集者: 108 編集日時 2009-02-23 16:39 ]
KOH♪
会議室デビュー日: 2008/07/31
投稿数: 16
お住まい・勤務地: 名古屋市
投稿日時: 2009-02-23 17:36
Kingさんへ


実行した結果、求めていたデータを取得することが出来ました。
感謝しております。

Pertition という句を始めて目の当たりにしました。
今から深く学習していくことにします。

お世話になりました。
1

スキルアップ/キャリアアップ(JOB@IT)