4

次のようなレコードを持つ、管理が不十分な建物データベースにクエリを実行しています。

ID    NAME          CODE
54    Building A    a1234
97    Building A    a1234

次の JPQL ステートメントを使用してクエリを実行しています (「bCodes」は建物コードの配列です)。

SELECT building FROM Building building WHERE building.NAME IN (:bCodes)

予想どおり、bCodes = "a1234" の場合、両方のレコードが返されます。JPQLでレコードを1つだけ引き戻す方法はありますか? これまでのところ方法が見つかりません。GROUP BY と DISTINCT は、このコンテキストでは機能しないようです。

4

1 に答える 1

4

データベースを修正することをお勧めします (重複を削除し、適切な列に一意の制約を設定します)。ただし、質問に答えるために、任意の ID を選択するサブクエリを使用してクエリをさらにフィルタリングできます。

SELECT building FROM Building building 
WHERE building.code IN :bCodes
AND building.id = (SELECT MIN(b2.id) FROM Building b2 
                   WHERE b2.name = building.name 
                   AND b2.code = building.code)
于 2013-07-22T20:18:03.463 に答える