こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

同一データの抽出の方法について

T1のレコードで同一の値を持つレコードを抽出したいのですがSQLが考え付きません。
ご協力願います。

ここで同一の値とはT2,T3の各サブテーブルの値の集合が一致するするものです。
下記のようなデータ例の場合、
T1のデータ1とデータ3が同一の値を持つレコードとなります。

Oracle 10を使ってます。PL・SQLでもかまいません。

T1
key データ
--------------------
key1  データ1
key2  データ2
key3  データ3

T2
key value
-------------------
key1 v11
key1 v12
key2 v21
key3 v11
key3 v12

T3
key value
-------------------
key1 vv11
key1 vv12
key2 vv21
key2 vv22
key3 vv11
key3 vv12

よろしく御願いします。

投稿日時 - 2005-01-17 00:31:59

QNo.1171381

困ってます

質問者が選んだベストアンサー

T3.VALUEが、vv11になっているのが、理解できないんですが..
文面からするとこんな感じなのかな..

select * from t1
where
key in
(select key from t1
minus
select key
from
(select key from (select * from t2 minus select * from t3)
union
select key from (select * from t3 minus select * from t2)))

とか

select t1.*
from
t1,
(select t2.*,row_number() over(partition by key order by value) R from t2) t2
(select t3.*,row_number() over(partition by key order by value) R from t3) t3
where t1.key=t2.key and t1.key=t3.key and t2.value=t3.value and t2.R=t3.R

どちらも同じ結果になるかと思います。

投稿日時 - 2005-01-17 11:52:34

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

手許に8iしかないのでANSI JOINは使っていませんが、
こんな感じでできると思います。

select * from T1
where key in
(
select T2.key from
(select key,count(*) as cnt from T2 group by key) T2
,(select key,count(*) as cnt from T3 group by key) T3
where T2.key = T3.key
and T2.cnt = T3.cnt
);

投稿日時 - 2005-01-17 01:17:03

あなたにオススメの質問