2

私のHQL選択クエリは以下のようなものです

     select user.id, user.address.id from User user

このクエリでは、user.addressNULLの場合、クエリはそのユーザー レコードを返しません。

私の要件は、user.address が NULL の場合、user.address.id は user.address.id の '' (空の値) を含むすべての User レコードを返す必要があることです。レコードは以下のようになります

[1,'']、[2,1]、[3,'']...

4

4 に答える 4

2

そのようなものの正確な答えを見つけました。

select user.id, case when user.address is null then '' else user.address.id end 
from User user

select句のこのcase句は、if elseのように機能します

if (user.address == null)
   return "";
else
   return user.address.id;

このようにして、すべてのレコードを取得します。

于 2012-09-27T09:45:01.723 に答える
0

それが唯一のケースである場合は、次のようにすることができます。

select user.id, user.address.id from User user

user.addressnull でない場合、これによりすべてのレコードが得られます。

これで、残りのレコードを取得できます。

select user.id, '' from User user when user.addresss is null
于 2012-09-27T07:03:06.390 に答える
0

「coalesce」コマンドを使用できます (「nvl」SQL コマンドなど)。

ここで読むことができるように:

HQL の nvl コマンドに相当するのは、coalesce コマンドです。coalesce(a,b) は、a が null でない場合は a を返し、そうでない場合は b を返します。

したがって、次の行に何かが必要です。

col1 = 合体するテーブルから (:par1, 'asdf')

編集:あなたの場合、次のようなものを探していると思います:

ユーザー user から user.id、coalesce(user.address.id, '') を選択します

于 2012-09-27T06:09:33.387 に答える