2

SQL を使用してエンティティ (Forslag) にアクセスしていますが、別のエンティティの列 (b.dato) を使用して並べ替えたいと考えています。

これは私の最初のSQLです:

        select distinct ff.*
        from Forslag ff 
          inner join Forlag f on ff.forlag_id = f.forlag_id
          inner join LoggBehandling b on ff.forlag_id = b.forlag_id
          inner join Kontrollpanel p on f.uhrPuMote_id = p.saksbehandlerUhrPuMote_id
        where b.status_id = 7

        union all

        select distinct ft.*
        from Forslag ft
          inner join Tidsskrift t on ft.tidsskrift_id = t.tidsskrift_id
          inner join LoggBehandling b on ft.tidsskrift_id = b.tidsskrift_id
          inner join Kontrollpanel p on t.uhrPuMote_id = p.saksbehandlerUhrPuMote_id
        where  b.status_id = 7

        order by b.dato desc

休止状態は不平を言います:ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.

b.datoこれはマッピングに影響を与えると思われるため、選択に追加することは実際にはできないと思います。

        select distinct ff.*, b.dato
        from Forslag ff 
          inner join Forlag f on ff.forlag_id = f.forlag_id
          inner join LoggBehandling b on ff.forlag_id = b.forlag_id
          inner join Kontrollpanel p on f.uhrPuMote_id = p.saksbehandlerUhrPuMote_id
        where b.status_id = 7

        union all

        select distinct ft.*, b.dato
        from Forslag ft
          inner join Tidsskrift t on ft.tidsskrift_id = t.tidsskrift_id
          inner join LoggBehandling b on ft.tidsskrift_id = b.tidsskrift_id
          inner join Kontrollpanel p on t.uhrPuMote_id = p.saksbehandlerUhrPuMote_id
        where  b.status_id = 7

        order by b.dato desc

これをどのように解決すればよいですか?

4

1 に答える 1

1

SQLではなくHQLでよろしいですか???

1 つ目: HQL では UNION ALL を使用することはできませんが、2 つの異なるクエリを実行する必要があります。

2 番目: SQL で UNION 操作がある場合に order by を使用する場合、次の方法で ORDER BY を結果テーブルに適用する必要があります。

3番目: UNION ALLを使用する場合、なぜDISTINCTを使用するのですか?? ALL なしで UNION を使用することは、DISTINCT と同じことです。

   select *
   from (
    select ff.*, b.dato as dato
    from Forslag ff 
      inner join Forlag f on ff.forlag_id = f.forlag_id
      inner join LoggBehandling b on ff.forlag_id = b.forlag_id
      inner join Kontrollpanel p on f.uhrPuMote_id = p.saksbehandlerUhrPuMote_id
    where b.status_id = 7

    union all

    select distinct ft.*, b.dato
    from Forslag ft
      inner join Tidsskrift t on ft.tidsskrift_id = t.tidsskrift_id
      inner join LoggBehandling b on ft.tidsskrift_id = b.tidsskrift_id
      inner join Kontrollpanel p on t.uhrPuMote_id = p.saksbehandlerUhrPuMote_id
    where  b.status_id = 7
  ) as resultTable
  order by resultTable.dato desc
于 2013-09-04T11:03:34.343 に答える