0

テーブルをクエリして、複雑な順序付けスキームでレコードを取得する必要があります。

3つの個別のクエリで必要な結果を取得し、プログラミングコードで取得した後、ブルートフォースで結果を連結できます。

むしろ、データベースへの1回の呼び出しで、1つのデータベースですべてを取り戻したいと思います。

委員会名と小委員会名を記載した「委員会」という表があります。

committee_name               subcomittee_name
--------------               -----------------
Hals Committee on Books
Hals Committee on Books      Subcommittee on Paperbacks
Hals Committee on Books      Subcommittee on Leather Bound Volumes
General Purpose Committee
Stans Committee on Music
Stans Committee on Music     Subcommittee on CDs
Stans Committee on Music     Subcommittee on MP3s

すべての小委員会は親委員会に属しています。

すべての委員会に小委員会があるわけではありません。

すべての委員会には、新しい/別の委員会を区別するための小委員会のnullエントリがあります

委員会と小委員会の名前をすべて、昇順で並べ替えて戻したいと思いますが、ひねりを加えています。最初にリストされているすべての「スタン」委員会、次にハルス、そして他の委員会をお願いします。

例:

committee_name               subcomittee_name
--------------               -----------------
Stans Committee on Music
Stans Committee on Music     Subcommittee on CDs
Stans Committee on Music     Subcommittee on MP3s
Hals Committee on Books
Hals Committee on Books      Subcommittee on Paperbacks
Hals Committee on Books      Subcommittee on Leather Bound Volumes
General Purpose Committee

私は3つの別々のクエリでそれを得ることができます:

select * from committee where substr(committee_name,1,1) = 'S' order by committee_name,subcommittee_name nulls first

select * from committee where substr(committee_name,1,1) = 'H' order by committee_name,subcommittee_name nulls first

select * from committee where substr(committee_name,1,1) not in ('H','S') order by committee_name,subcommittee_name nulls first

私が欲しいのは、たった1つのクエリ、データベースへの1回のトリップで必要なものを取得することです。

何か案は?

スティーブ

4

1 に答える 1

4

caseaを使用して、最初に「S」、次に「H」、次に他の文字を注文できます。

select  committee_name
,       subcommittee_name 
from    committee 
group by 
        committee_name
,       subcommittee_name
order by
        case min(substring(comittee_name,1,1))
        when 'S' then 1
        when 'H' then 2
        else 3
        end
,       committee_name
,       subcommittee_name nulls first

行のグループ全体を並べ替える可能性があるため、min集計が必要です。

于 2013-02-21T18:03:34.927 に答える