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

このQ&Aのポイント
  • T1のレコードで同一の値を持つレコードを抽出する方法について教えてください。
  • T2とT3の各サブテーブルの値の集合が一致するものを基準に、T1から同一の値を持つレコードを抽出します。
  • Oracle 10を使用しており、PL/SQLでも構いません。
回答を見る
  • ベストアンサー

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

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 よろしく御願いします。

  • Oracle
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
回答No.2

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 どちらも同じ結果になるかと思います。

その他の回答 (1)

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.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 );

関連するQ&A

  • 複数のデータ抽出条件について

     |nen  |kaisha|cust |seihin|code |qty |ctg | ------------------------------------------------- 1 |2004 |A   |AC  |ITEMA |1  |100 |2 | 2 |2004 |A   |AC  |ITEMA |2  |100 |1 | 3 |2005 |A   |AC  |ITEMA |1  |200 |1 | 4 |2005 |A   |AC  |ITEMA |2  |300 |2 |○ 5 |2004 |B   |BC  |ITEMB |1  |100 |3 | 6 |2004 |B   |BC  |ITEMB |2  |100 |2 | 7 |2005 |B   |BC  |ITEMB |2  |200 |1 |○ 8 |2005 |B   |BC  |ITEMB |1  |200 |2 | 9 |2004 |C   |CC  |ITEMC |2  |200 |2 |○ 10 |2004 |C   |CC  |ITEMC |1  |100 |1 | KEY:nen,kaisha,cust,seihin,ctg DB:Oracle 上記テーブルから、「ctg」項目の値を抽出する時、 以下の条件で抽出したいと考えています。 条件:nendo=2004,2005 kaisha、cust、seihinが同一のデータがある場合、 ・nen=2004のqtyの値が大きいものを抽出する。 ↓1件に絞り込めない場合、 ・nen=2005のqtyの値が大きいものを抽出する。 ↓1件に絞り込めない場合、 ctgが小さいものを抽出する。 (上記表の○データを抽出したいと考えています) PL/SQLで上手くデータを抽出する方法はありますでしょうか? 何度も考えて見たのですが、上手くいきません でした・・・。ご教授頂けましたら嬉しいです。 宜しくお願い致します。

  • 「主キー以外重複データ(フィールド多数)」の抽出

    タイトルのような抽出方法が必要になり、その出し方で困っています フィールドが100以上ある大きなテーブルが複数(フィールド構造は全く同じ)あり、 そのレコードを一つにまとめる為重複データを抽出し削除したいのです 条件は「主キー以外の全てのフィールドのデータが一致してる重複データ」であり、 それをどうやればAccessの機能で出せるのか悩んでいます。 最初はクエリでグループ化して出そうと思ったのですがこのフィールド数では全て グループ化はできず、 VBAで一行ずつループで処理しようにもキー以外の全フィールド一致とする検索条件のSQLのWHERE式が複雑すぎると出て処理できませんでした フィールド数が多大なテーブルで主キー以外完全一致の重複レコードをうまく抽出するにはどうすればいいのでしょうか?

  • 抽出方法

    SQL Server2008を使用しています。 key c1 c2 k ------------ 1 01 01 100 2 01 01 200 3 01 02 120 4 01 02 150 5 01 02 200 上記のようなデータがあるとします。 c1,c2が同じものをまとめて1レコードとして 抽出したいと思っています。 c1,c2が同じものは最大5つまでです。 合計と内訳を下記のようにまとめて 抽出するにはどのようなSQLを記述すればよいでしょうか?    ↓↓↓    c1 c2 k1 k2 k3 k4 k5 k0 --------------------------- 01 01 100 200 0  0 0 300 01 02 120 150 200 0 0 470

  • 抽出結果を1件ずつ次の抽出条件に使う方法

    Oracleで下記のようなデータ処理を実現する方法を調べています。 (1)特定の条件でデータを抽出する。  select X from TABLE1 where Y="test" (2)(1)で抽出したデータを別の抽出条件の値として1つずつ使用し、  別のsqlにてデータを抽出し、件数を取得する。 select count(*) from TABLE2 where Z = aaa  ※aaaには(1)の結果を順に入れる。 2,3件であれば手作業で(2)を実施すればよいのですが、(1)の結果が数100件 になっているため、(2)をループ処理させたいです。 PL/SQLが必要なのでは?と思いつつ、使ったことがありません。 少し調べてはみましたが、よくわからず、困っています。 特に難しい処理ではないと思ってはいるのですが、期日まで時間がなく、質問 させていただきました。 一時的なデータ確認のためだけなので、専用にプログラムを組むのはしたく 無いと思っています。 参考になる情報をいただければ幸いです。 もちろん、(2)のサンプルコードなどいただければ大変助かります。 どうぞよろしくお願いします。

  • SQLの抽出方法を可能か教えてください

    初めましてm(__)m SQLを最近始めたばかりの為、次のような場合の抽出条件がわかりません。 どなたかご存知の方がいましたら、回答をよろしくお願いいたします。 次のようなDBがあったとします。 項目1  項目2  項目3 001   aaa   003 002   bbb   005 003   ccc   004 004   ddd   005 このDBに対し、検索条件を項目1=004とした場合に、次のように抽出したいのですが、どうすればよろしいですか? 001   aaa   003 003   ccc   004 004   ddd   005 ※項目1の値が項目3と一致したらそのデータも抽出し、更にそのデータの項目1の値が項目3と一致したらそのデータも抽出するみたいにしたいと考えているのですが可能でしょうか? 以上です。 分かる人がいましたら、よろしくお願いします。

  • excel データ抽出方法

    こんいちは 列1と列2を比べて条件が一致したデータを抽出したいのですが,方法がわかりません。どなたかご存知のかた教えていただけないでしょうか? 列1  列2 aa   vv bb   dd cc   ff dd   aa ee   bb この場合aa,bb が一致する。

  • アクセスでのデータの引き抜き(抽出)方法について

    アクセスのデータ抽出についてご質問が ございます。 100件あるデータの中から 抽出条件が異なるデータを レコードごとに3件抽出したいのですが 困ってます。 例えば、100件のデータの 1フィールド目の数値が 1234567890 7891234567 5678901234 となる値を 抽出条件に割り当て 100件中3件ほど、レコードごとに 抽出出来る 方法はないでしょうか? お手数ですがアドバイスお待ちして おります。

  • Access VBAでのデータ抽出の仕方

    Access VBAでのデータ抽出の仕方 Access VBAでデータを抽出して、テキストボックスにデータを配置したいと思います。 Formにtxt1~txt10までのテキストボックスが10個あります。 テーブルからデータを引っ張ってきてレコードセットにいれます。 Dim objADOCON As ADODB.Connection Dim objADORS As ADODB.Recordset Dim strSQL As String Dim SQL As string SQL = "Select * from Table1" Set objADOCON = Application.CurrentProject.Connection Set objADORS = objADOCON.Execute(SQL) これでレコードセットを取得しました。このレコードセットは「ID」列があり、プライマリーキーを設定しています。またZAIKOという列もあります。 ID=001の時、在庫は100 ID=002の時、在庫は200 といったように条件を絞って、テキストボックスに値を入れたいと思います。 objADORS.Filter = "[ID] = '001'" txt1.value = objADORS!ZAIKO objADORS.Filter = "[ID] = '002'" txt2.value = objADORS!ZAIKO ..... を10回繰り返せば条件毎に値がセットするのはわかります。 ただし、あまりスマートなやり方ではなく、もっといい方法があるんじゃないかと思うのですが考えつきません。 何か良い方法、手段がありましたらお教え下さい。 よろしくお願いします。

  • レコードの抽出

    PerlCGIでSQL-ENGINE.plというライブラリを使ってSQLを実行しています。最も結構ローカルなフリーのライブラリだから(作った人におこられるか)それの使い方を教えてくださいという訳ではありません。 一般的な形で結構ですので、SQL文を教えてもらいたいのです。 例えば select * from テーブル where 抽出条件 order by 何かの基準で降順並替え; として、さらにこの抽出結果の上から11番目のレコードから20番目のレコードだけを抽出したいとすると、これにどのようなSQL文を追加したらよいのでしょう。

  • 複数レコードの値を合計したときに値が正しいか検査?

    SQLで複数レコードにある値を合計したときに値が正しいか検査をして、整合性が取れないものを抽出したいのですが・・・ 例えば、イラストのようにテーブルがあるとします。 実験管理番号、バージョンがキーになっております。 変化履歴というのは分数を文字列型で入れているものです。 AAA001で行けば、20回の検査をしています。 まず、5回目に変化、その後 11回後の16回目、その後 2回後の18回目、その後 2回後の20回目とレコードを作成しています。 つまり分母と分子の合計が一致しなくてはいけません。 ただ、その中でも BBB001のV1 と TTT005のV7データが 分母と分子の数が一致しません。 こういったデータを抽出させたいのですが、文字列データでもあるためどのように不適切データを検索したらいいのか悩んでいます。 詳しい方いらっしゃいましたらご教示いただけませんでしょうか?