2012-06-12 142 views
0

我有一個實體包含兩個可選的多對多關係(childA < < - >父< - >> childB)。這兩個子實體中的每一個都包含一個我感興趣查詢的可選字符串。核心數據子查詢

使用相同的格式,我得到了我期望的結果,但不是其他結果。我明白這意味着我不瞭解我正在使用的工具;並希望得到一些見解。這兩個查詢是什麼樣子:

[email protected] != 0 AND (0 == SUBQUERY(childA, $a, $a.string != NIL)[email protected]) 
[email protected] != 0 AND (0 == SUBQUERY(childB, $a, $a.string != NIL)[email protected]) 

我希望找回來自childA和childB的非空實例結果只有每個實體實例字符串也是零。我的問題是,爲什麼會給出我期望的結果;而另一個不?

澄清: 我試圖解決一般問題,我正在尋找兩件事之一。我要麼搜索屬性中的默認值。當這個屬性是可選的時,我另外搜索一個零屬性。當可選關係只在填充時才被考慮,這個問題就更加複雜了。如果沒有關係數!= 0,我會找回所有沒有關係的父母。在一種情況下,這是所需的行爲。在另一種情況下,這似乎減少了返回的父計數(0結果)。

對於可選屬性的情況下,查詢可能是這樣的:

[email protected] != 0 AND (parent.gender == -1) OR (parent.gender == NIL) 

哪裏有在關鍵路徑可選的關係,查詢需要在第一個例子列舉的形式。

再次,我已經得到了我所期望的結果,除了一個案例,其中似乎沒有任何關係或屬性特徵。或者我應該說,沒有什麼有關此異常的數據模型結構或查詢格式獨特...

+0

要回答你的最後一個問題,而沒有任何額外的信息,你可以通過偶然的第一個查詢得到正確的結果。 – Mundi

回答

0

我現在明白了這個問題。
在我的情況下,首先用0計數過濾掉NSSets通常是合乎邏輯的。但是,在有問題的情況下,使用0計數返回兩個NSSets的結果以及使用> 0計數的NSSets計數(其中屬性爲零(可選時),或者該屬性設置爲其默認值)在邏輯上是正確的。換句話說,在有問題的情況下,左條件需要被移除,從而產生以下格式:

(0 == SUBQUERY(childA, $a, $a.string != NIL)[email protected]) 

看來我需要有管理對象表示其方案是由一個適當的情況下個案基礎...唷!

0

也許你的第二個子句中混了==!=,它應該是

[email protected] != 0 AND (SUBQUERY(childA, $a, $a.string != NIL)[email protected] != 0) 

這將如果能夠以簡單的英語形式提出查詢,請更清楚您想要達到的目標。

順便說一句,你可以使用NSExpression類的expressionForSubquery:usingIteratorVariable:predicate:打造的子查詢爲您服務。那麼您可以更輕鬆地獲得有用的錯誤報告。

+0

感謝您考慮我的問題。請參閱我上面的澄清編輯。 – stephen

+0

另外,我確定右側的子查詢是正確的。我嘗試過所有==和!=的排列組合。其他情況下結果顯然不正確。 – stephen