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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracleのビュー作成時に「指定...
-
ROWNUMについて
-
P/L SQLで値が更新されない。
-
ACCESS クエリーから件数取得
-
Oracle SQLにて固定長でデータ...
-
DB2でREPLACEによる文字列の置換
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
Accessでテーブル名やクエリ名...
-
Accessでテーブルの値をテキス...
-
必須入力項目と入力必須項目
-
Accessのクエリでデータの入力...
-
空白をそのままインポートする...
-
「直需」の意味を教えてください
-
Access 昇順・降順で並び替え...
-
ACCESSのクエリで集計で、先頭...
-
Joy To Keyのマウスやキーボー...
-
INSERT INTO ステートメントに...
-
データベースの1要素に複数デー...
-
複数のレコードを1つのレコード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Oracleのビュー作成時に「指定...
-
Oracle SQLにて固定長でデータ...
-
DB2でREPLACEによる文字列の置換
-
ROWNUMについて
-
ORACLEで一番最初の結果だけを...
-
WITH句で複数テーブルを定義す...
-
抽出結果を1件ずつ次の抽出条件...
-
ある値以上の空き番の最小値を...
-
sqlplusで日本語入力
-
PL/SQL 複数件同じ値で更新す...
-
ある単位で集計した最小値を項...
-
効率のいい集計SQL文
-
最終行までの書式を揃えたい
-
P/L SQLで値が更新されない。
-
動的SQLでのDECODE
-
UPDATE文でこのような更...
-
distinct で抽出したレコード件数
-
時間の重複を加味した連続時間S...
-
VBAのRows.Selectについて
-
SQL 計算
おすすめ情報