2

次のようなNAMEテーブルがあるとします。

PERSON_ID   PART_TYPE   VALUE

およびPERSON_IDはへの外部キー参照PERSONです。

内部にPART_TYPEは、、、、などFAMILYの値があります。当然、値は実際の値になります。GIVENPREFIXSUFFIX

SQLクエリ(Hibernateは言うまでもなく)をどのように記述して、これを、、PART_TYPE次にVALUEfor FAMILY PART_TYPE、次にVALUEfor ?の順に並べGIVEN PART_TYPEますか?

次の3人がいるシナリオを考えてみましょう。

Given3 Family10
Given5 Family10
Given7 Family10

このSQLの場合:

SELECT this_.person_id, name1_.part_type, name1_.value
FROM person this_
LEFT OUTER JOIN name name1_
ON this_.person_id       =name1_.person_id
ORDER BY (
  CASE
    WHEN name1_.PART_TYPE = 'FAMILY'
    THEN 0
    WHEN name1_.PART_TYPE = 'GIVEN'
    THEN 1
  END),
  name1_.VALUE,

私は得る:

  ID2  FAM Family10
  ID1  FAM Family10
  ID3  FAM Family10
  ID4  GIV Given3
  ID5  GIV Given5
  ID6  GIV Given7

が欲しいです:

ID1  FAM Family10
      ID2  FAM Family10
      ID3  FAM Family10
      ID4  GIV Given3
      ID5  GIV Given5
      ID6  GIV Given7

したがって、現在の状態のこれらのFamily10行の順序は不確定です。これは、ID1、ID2、およびID3の任意の組み合わせである可能性があります。与えられた値に従って並べてほしい。複数のselectステートメントを使用しても、これを行う方法が本当にわかりません。

これを実行したい理由は、これらの個人IDを取得したいので、自分の側でフィルタリングを実行して、個別の個人IDを取得し、それにページングロジックを実行してから、実際に個人をロードすることができるためです(これにより、多くの削減が可能になります) SQL呼び出しの)。現時点ではデータベーススキーマを変更できません。

4

1 に答える 1

3

これはあなたが求めているものとは少し異なりますが、おそらくそれは役に立ちます-それは家族と各人の名前を与えます。

SELECT this_.person_id, family.value as family, given.value as given
FROM person this_
LEFT OUTER JOIN name family
    ON this_.person_id = family.person_id
    and family.PART_TYPE = 'FAMILY'
LEFT OUTER JOIN name given_
    ON this_.person_id = given.person_id
    and given.PART_TYPE = 'GIVEN'
ORDER BY family.value, given.value
于 2012-05-02T20:01:00.310 に答える