0

次のクエリを実行すると:

SELECT count(*) as count, $new_source as name 
from news 
LET $new_source = if(eval("source.indexof('Other') === 0"), "Other", source)
where country_id = "111111"
group by $new_source

次のようなエラーがスローされます。

com.orientechnologies.orient.core.exception.OCommandExecutionException: 現在のレコードが NULL であるため、式項目 'source' を解決できません

「ニュース」クラスに指定された country_id のレコードが少なくとも 1 つある場合はうまく機能しますが、指定された country_id のレコードがない場合、このエラーがスローされます。

country_id に関係なく、すべてのニュース レコードに対して一般的なクエリを使用しているため、特定の国にレコードがない場合は、空のレコード セットを返す必要があります。

また、orientdb の ifnull 関数を使用して null 値をスキップしようとしました。次のようになります。

SELECT count(*) as count, $new_source as name from news LET $new_source = ifnull(source, 0, if(eval("source.indexof('Other') === 0"), "Other", source)) where country_id = "111111" group by $new_source

しかし、それは機能しておらず、同じエラーをスローしています。

OrientDb 2.1.8 を使用しています。JavaScript関数を使用してコンソールから呼び出したくありません(ここで提案されているように)

group by で if を使用しているときに null 値をスキップする方法はありますか?

4

2 に答える 2

1

クエリを変更しようとしましたが、解決策が見つかった可能性があります。

select count(*) as count,name
from (
  select if(eval("source.indexof('Other') === 0"), "Other", source) as name 
  from news where country_id = "111111")  
group by name

エラーはなく、正しく結果もありません。

ここに画像の説明を入力

select count(*) as count,name
from (
  select if(eval("source.indexof('Other') === 0"), "Other", source) as name 
  from news where country_id = "1110")  
group by name

ここで正しく結果が得られました

ここに画像の説明を入力

それが役に立てば幸い。

于 2016-02-22T19:34:25.517 に答える
0

これで問題が解決するはずです:

インデックスを削除し、フルテキスト タイプの別のインデックスをエンジン Lucene で再作成します。

ここに画像の説明を入力

クエリを実行すると、次の結果が得られます。

ここに画像の説明を入力

于 2016-02-22T15:39:43.810 に答える