0

2 つのオプションの対多関係 (childA <<-> 親 <->> childB) を含むエンティティがあります。これら 2 つの子エンティティにはそれぞれ、クエリを実行したいオプションの文字列が含まれています。

同じ形式を使用すると、一方では期待どおりの結果が得られますが、他方では得られません。これは、自分が使用しているツールを理解していないことを意味することを理解しています。そして、いくつかの洞察を望んでいました。2 つのクエリは次のようになります。

childA.@count != 0 AND (0 == SUBQUERY(childA, $a, $a.string != NIL).@count)
childB.@count != 0 AND (0 == SUBQUERY(childB, $a, $a.string != NIL).@count)

各エンティティ インスタンスの文字列も nil である場合にのみ、childA と childB の両方の nil 以外のインスタンスから結果が返されることを期待します。私の質問は、なぜ私が期待する結果が得られるのかということです。もう一方はそうではありませんか?

明確化: 私は、2 つのうちの 1 つを探しているという一般的な問題を解決しようとしています。属性のデフォルト値を探しています。属性がオプションの場合、さらに nil 属性を検索しています。オプションのリレーションシップが入力されている場合にのみ考慮する必要がある場合、問題はさらに複雑になります。関係カウント != 0 がなければ、関係がゼロのすべての親が返されます。場合によっては、これが望ましい動作です。別のケースでは、返された親の数が (結果が 0 になるまで) 減少しているように見えます。

オプションの属性の場合、クエリは次のようになります。

parent.@count != 0 AND (parent.gender == -1) OR (parent.gender == NIL)

キーパスにオプションの関係がある場合、クエリは最初の例で例示した形式を取ります。

繰り返しになりますが、1 つのケースを除いてすべてで期待どおりの結果が得られました。このケースでは、その関係や属性の特性に固有のものはないようです。または、データ モデルの構造またはクエリ形式において、この例外に固有のものは何もないと言うべきです...

4

2 に答える 2

0

多分あなたは混同し==!=2番目の句で、そうあるべきです

childA.@count != 0 AND (SUBQUERY(childA, $a, $a.string != NIL).@count != 0)

最初に平易な英語でクエリを作成できれば、達成したいことがより明確になります。

ところで、expressionForSubquery:usingIteratorVariable:predicate:クラスNSExpressionを使用してサブクエリを作成できます。その場合、有用なエラー報告がより簡単に得られる可能性があります。

于 2012-06-12T11:56:30.880 に答える
0

私は今問題を理解しています。
私の場合、最初にカウント 0 の NSSet を除外することは通常、論理的に正しいことです。しかし、問題のあるケースでは、カウントが 0 の NSSet と、カウントが 0 より大きい NSSet の両方の結果を返すことは論理的に正しいことです。つまり、問題のあるケースでは、左側の条件を削除する必要があり、次の形式になります。

(0 == SUBQUERY(childA, $a, $a.string != NIL).@count)

ケースバイケースで適切なシナリオを管理対象オブジェクトに示す必要があるようです... yuk!

于 2012-06-12T19:25:55.807 に答える