
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)のサンプルコードなどいただければ大変助かります。
どうぞよろしくお願いします。
No.6ベストアンサー
- 回答日時:
--TABLE4どぉえぇすぅかぁ(爆
set serveroutput on
declare
v_count number;
begin
for v_rec in (select id from TABLE1) loop
select count(*) into v_count
from TABLE4
where Id in (
select TB4_id from TABLE3 where TB2_id in (
select Id from TABLE2 where TB1_id = v_rec.id));
dbms_output.put_line(v_rec.id || ' ' || v_count);
end loop;
end;
/
TABLE3にTB3_idはないので……TB2_idですよね?
ちょっと時間がないので、PL/SQLで逃げときます。
SQLの部分を適当にいじってください。
# どなたか……SQLお願いします(笑
No.5
- 回答日時:
なるほど、他にも関係するテーブルが有ったのですね。
TABLE1 を全件検索するSQLの SELECT 句のサブクエリにそのSQLをそのまま入れてやればよいのでは?
Oracle では試していませんが・・・。
例) ------------------------------------
SELECT
Id,
(
SELECT COUNT(*) FROM TABLE4 t4 where t4.Id IN (
SELECT TB4_id FROM TABLE3 t3 WHERE t3.TB2_id IN (
SELECT Id FROM TABLE2 t2 WHERE t2.TB1_id = t1.Id
)
)
) AS cnt
FROM TABLE1 t1
-- 必要に応じて絞り込む
-- WHERE Id IN ('hoge')
;
ありがとうございます!
試してみたいと思います。
今まで適当にOracle使っていたので、簡単に取得できそうなことに四苦八苦してしまいました。
取り急ぎお礼まで。
No.4
- 回答日時:
--こういうことだったの?…TABLE3て何だ(笑
select T1.X, count(*)
from TABLE1 T1, TABLE2 T2, TABLE3 T3
where T1.X = T3.Y3
and T1.Y = 'test'
and T2.Y2 = T3.X3
group by T1.X;
正確な回等が欲しければ正確に質問(できるだけ簡略化して)することです
最初の質問は簡略化したのではなく間違っていただけでしょう?
まだ何か隠していませんか?
簡単な例を挙げたほうがいいですね
ご指摘ありがとうございます。
質問が不正確ですみません。
改めて下記に整理をしてみました。
--------------------------------
◆テーブル構成
TABLE1:Id
TABLE2:Id,TB1_id
TABLE3:Id,TB2_id,TB4_id
TABLE4:Id
※TBx_Idは各TABLExのIdの事です。
上記構成で、Table3にTB4_idが登録されているのにTABLE4に
データが無いものがあるので、その抽出が目的です。
Table1のID単位でTable4の無いもの、あるものの区別がしたいです。
具体的には、上記の結果が0かどうかで区別がつきます。
select count(*) from TABLE4 where Id in(select TB4_id from TABLE3 where TB3_id IN(select Id from TABLE2 where TB1_id=(TABLE1のId)));
上記SQLをTABLE1のId毎にチェックしたいです。TABLE1は数百件あるので。。。
どうぞよろしくお願いします。
No.3
- 回答日時:
> (1)select X from TABLE1;
> ※where文を付けるケースもあります。
> (2)select count(*) from TABLE2 where Y2 IN(select X3 from TABLE3 where Y3=((1)
> の結果を順に入れる);
なら、
select table1.X,count(*) from TABLE2,table1
where table2.Y2 IN(select table3.X3 from TABLE3 where table3.Y3= table1.X)
and table1.Y = 'test' /* とtable1に条件をつけてもよい */
group by table1.X
でいいのでは?
No.2
- 回答日時:
他には下記の様な方法も有りますね。
まあ #1 さんの方法の方が分かりやすくて実行速度も速いかも知れませんが。■ 相関サブクエリを使って絞り込む方法
select Z, count(*) from TABLE2
where EXISTS (select * from TABLE1 where Y = 'test' AND TABLE1.X = TABLE2.Z)
group by Z;
■ テーブル結合を使う方法
select t2.Z, count(*)
from TABLE1 t1 INNER JOIN TABLE2 t2 ON (t1.X = t2.Z)
where t1.Y = 'test'
group by t2.Z;
参考URL:http://gihyo.jp/dev/serial/01/sql_academy2/000901
アドバイスありがとうございます!
実際のSQLは以下の形です。
(1)select X from TABLE1;
※where文を付けるケースもあります。
(2)select count(*) from TABLE2 where Y2 IN(select X3 from TABLE3 where Y3=((1)
の結果を順に入れる);
(2)の条件が既に複数(IN)あります。
説明不足ですみませんでした。
自分でももう少し調べてみます。明日の朝までに何とかしなければならないので、アドバイスいただければ助かります。
No.1
- 回答日時:
--こういうことかしら?
select Z, count(*) from TABLE2 where Z in
(select X from TABLE1 where Y = 'test')
group by Z;
アドバイスありがとうございます!
説明を簡略化しすぎていたようで、教えていただいた方法だと、Z毎に1件となり欲しい結果が得られませんでした。
実際のSQLは以下の形です。
(1)select X from TABLE1;
※where文を付けるケースもあります。
(2)select count(*) from TABLE2 where Y2 IN(select X3 from TABLE3 where Y3=((1)
の結果を順に入れる);
(2)の条件が既に複数(IN)あります。
説明不足ですみませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Excel(エクセル) エクセルで重複データを行ごとに抽出したい 4 2022/12/05 08:18
- Excel(エクセル) 【詳しい方教えて下さい】EXCEL条件に一致する値の複数抽出 9 2022/04/29 10:56
- MySQL SQLについて教えて下さい。 SELECT分で、あるカラムにある日付の 半年先のデータを取って来たい 3 2022/12/07 22:28
- Excel(エクセル) Excelの数式についての質問 1 2022/10/31 15:50
- Excel(エクセル) エクセルでINDEXとMACTHで出てきたデータの数を数えるには? 1 2023/04/25 10:21
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DB2でREPLACEによる文字列の置換
-
Oracleのビュー作成時に「指定...
-
SQL文の書き方
-
WITH句で複数テーブルを定義す...
-
distinct で抽出したレコード件数
-
ROWNUMについて
-
【マクロ】列を折りたたみ非表...
-
Excel 2019 のピボットテーブル...
-
Access テキスト型に対する指定...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
Accessでテーブル名やクエリ名...
-
変数が選択リストにありません
-
エクセルグラフの凡例スペース
-
Accessのフィールド数が255しか...
-
Accessクエリーで両方のテーブ...
-
SUBSTRING 関数に渡した長さの...
-
INSERT INTO ステートメントに...
-
access2000のクエリで・・・
-
SQLServer2005のSQL文での別名...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Oracleのビュー作成時に「指定...
-
DB2でREPLACEによる文字列の置換
-
Oracle SQLにて固定長でデータ...
-
抽出結果を1件ずつ次の抽出条件...
-
ROWNUMについて
-
ある値以上の空き番の最小値を...
-
sqlplusで日本語入力
-
WITH句で複数テーブルを定義す...
-
ORACLEで一番最初の結果だけを...
-
ACCESS クエリーから件数取得
-
結合について
-
時間の重複を加味した連続時間S...
-
重複
-
P/L SQLで値が更新されない。
-
ORACLEでの件数カウント方法
-
効率のいい集計SQL文
-
sqlの条件文に関して
-
SQL 計算
-
distinct で抽出したレコード件数
-
SQL2005 で 複数列でのユニー...
おすすめ情報