3 つの異なるファイル タイプを含むテーブルがあります。ファイル タイプ A が存在する場合は A を選択し、そうでない場合はファイル タイプ B が存在し、かつ同じ client_id を持つタイプ C がない場合は B を選択し、そうでない場合はタイプ C を選択します。選択した
ファイルをファイルから削除する他の魔法が後で発生します。テーブル。
Oracle 10g SQL データベースに次のテーブルがあります。
ID | TYPE | CLIENT_ID
########################
file1 | A | 1
file2 | B | 1
file3 | C | 1
file4 | B | 2
自宅でフォローしたい人のために、sqlfiddeまたは sql:
create table files (
id varchar(8) primary key,
type varchar(4),
client_id number
);
insert into files values ('file1', 'A', 1);
insert into files values ('file2', 'B', 1);
insert into files values ('file3', 'C', 1);
insert into files values ('file4', 'B', 2);
上記の基準に基づいて次のファイルを取得するための大きな厄介なクエリを作成したいと考えています。クエリが 4 回実行された場合、次の順序になります。
#1: file1, A, 1 (grab any As first)
#2: file4, B, 2 (grab any Bs who don't have any Cs with the same client_id)
#3: file3, C, 1 (grab any Cs)
#4: file2, B, 1 (same as run #2)
私を最も遠ざけた試みは、タイプごとに 3 つの個別のクエリを作成することでした。
--file type 'A' selector
select * from files where type = 'A'
--file type 'B' selector
select * from files where type = 'B' and client_id = (
select client_id from files group by client_id having count(*) = 1
);
--file type 'C' selector
select * from files where type = 'C'
それぞれの後に返される行数を確認し、それが 0 の場合は次の選択を使用しますが、すべて 1 つの SQL ステートメントで行います。