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

下記のようなテーブルがある場合に

Aテーブル     Bテーブル

品目(主)    品目(主) 子品目(主)SEQ
 パン1     パン1  小麦粉   1
          パン1  ジャム   2
          パン1  バター   3

結合条件
 A.品目 = B.品目

この時に1件のみ取得できるようにしたい。
Bテーブルから取得したいのは、SEQ3のデータ。

SELECT
A.品目,
B.子品目,
SEQ
FROM 
A,B
WHERE
A.品目 = B.品目(+)

とすると、下記3行のデータが取れてしまう。
パン1  小麦粉   1
パン1  ジャム   2
パン1  バター   3

これを↓だけ取得したいのです。
パン1  バター   3

外部結合ではそもそも取得できないのでしょうか?
どのようなSQLを書けばいいのか教えてください。

A 回答 (2件)

Pieere85さんの回答にあるとおり、バターを取得する条件が不明なのですが、


Bテーブルのseqが一番大きいものと勝手に妄想しました。

select A.品目, B.子品目
from Aテーブル A
left join (
select 品目, 子品目
from Bテーブル
where seq = (select max(seq) from Bテーブル group by 品目)) B
on (A.品目 = B.品目);
とか
select A.品目, B.子品目
from Aテーブル A
left join (
select 品目, 子品目
from (
select 品目,子品目,row_number() over(partition by 品目 order by seq desc) rnum
from Bテーブル)
where rnum = 1) B
on (A.品目 = B.品目);

こんな感じでどうでしょうか。
質問の際には使用しているOracleのバージョンを記載した方がいいと思いますよ。
    • good
    • 0
この回答へのお礼

丁寧にありがとうございました。
大変役に立ちました。

お礼日時:2011/03/30 12:34

Oracleの知識は余り豊富ではありませんが、


バターだけを取り出す理由=表示したい条件がわからない限り、
質問の意図がわからないので誰も回答ができないと思います。

ちなみにSEQは現在の条件での自動採番ですよね?

条件がわからないのでなんとも言えませんが
FROM句でサブクエリを使えば上手くいくかも知れません。
    • good
    • 0

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