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