2

jackrabbit-users リストでこの質問をしましたが、答えが得られませんでした。

JCR-SQL2 は SELECT DISTINCT (または同様の、AFAIK) を提供しません。JCR 1.0 の SQL や XPATH も同様です...人々はこれをどのように回避していますか?. 重複行を削除する最良の方法は何ですか?

誰かが結果を反復処理してセットに入れていると読みました。私の場合、膨大な数の結果が得られる可能性があるため、そのアプローチはコストがかかりすぎる可能性があります。

ここに誰か提案がありますか?

4

1 に答える 1

2

JCR 1.0 (JSR-170 など) または JCR 2.0 (JSR-283 など) で定義されているクエリ言語には、SELECT DISTINCT.

これを行う唯一の方法は、結果を手動で処理し、既に見た行 (またはノード) を破棄することです。一連のパスまたは Node オブジェクトを使用すると機能します。これはそれほど難しくありませんが、残念ながら必要以上に難しく、おっしゃるように、行や重複が多い場合はコストがかかる可能性があります。

これが、ModeShapeが JCR-SQL2 クエリを完全にサポートするだけでなく、 の使用も許可する理由ですSELECT DISTINCT。実際、ModeShape は次のような他の多くの機能をサポートしています。

  • WHERE句内の非相関サブクエリ
  • LIMIT nOFFSET m
  • UNIONINTERSECTおよびEXCEPT
  • FULL OUTER JOINCROSS JOIN
  • BETWEEN基準
  • IN条件の設定、使用NOT IN
  • DEPTHおよびPATH動的オペランド

他にもいくつかあります。詳細については、ドキュメントを参照してください。

于 2011-03-04T16:18:16.623 に答える