Sql 检索与两个子对象具有特定关系的核心数据对象
我有一个核心数据实体OrderItem,它与另一个实体OrderItemOption有对多关系。我想查找与两个特定OrderItemOptions有关系的特定OrderItem。如何在核心数据中做到这一点 OrderItemOptions有一个类型代码和optioncode,本质上是一个键/值。我正在寻找一个带有选项(typecode=OptionSet1,optionCode=BT)和另一个选项(typecode=OptionSet2,optionCode=CT)的orderItem 问题是如何区分查询中的第一个OrderItemOption对象和第二个OrderItemOption对象 我能够想出一个SQL查询来做我想做的事情。它使用别名将表与自身连接起来。如何在核心数据中实现等效 sql语句是:Sql 检索与两个子对象具有特定关系的核心数据对象,sql,core-data,nspredicate,Sql,Core Data,Nspredicate,我有一个核心数据实体OrderItem,它与另一个实体OrderItemOption有对多关系。我想查找与两个特定OrderItemOptions有关系的特定OrderItem。如何在核心数据中做到这一点 OrderItemOptions有一个类型代码和optioncode,本质上是一个键/值。我正在寻找一个带有选项(typecode=OptionSet1,optionCode=BT)和另一个选项(typecode=OptionSet2,optionCode=CT)的orderItem 问题是如
select * from zorderItem, zorderItemOption one, zorderItemOption two where
one.zorderitem = zorderItem.z_pk and
one.zoptiontypecode='OptionSet1' and one.zoptioncode='BT' and
two.zorderitem =zorderitem.z_pk and
two.zoptiontypecode='OptionSet2' and two.zoptioncode='CT';
我认为我不太理解谓词中“ANY”关键字背后的语义。我能够接近
NSPredicate *pre = [NSPredicate predicateWithFormat:
@"order == %@ and
(any options.optionTypeCode == %@ and any options.optionCode == %@)
and
(any options.optionTypeCode == %@ and any options.optionCode == %@)",
order, @"OptionSet1", @"BT", @"OptionSet2", @"CT"];
但当选项编码反转时,它也匹配
我尝试在每个括号表达式外分解“ANY”,但这导致了一个解析异常
也许一个更简单的例子也会很有趣。如果我有一个与书籍有对多关系的作者实体呢。我如何创建一个谓词来表示,找到写了《Book1》和《Book2》两本书的作者?有人在苹果开发者论坛上回答 重复这里的帖子 听起来你要找的是一个子查询。子查询的解释之一: 我想应该是这样的
order == %@ AND
subquery(orderItemOptions, $one, $one.typeCode = %@ && $one.optionCode = %@).@count >0 AND
subquery(orderItemOptions, $two, $two.typeCode = %@ && $two.optionCode = %@).@count >0
对于谓词。虽然我不确定为什么在尝试中使用order==%@子句,我只是将其保留在版本中,并使用子查询与之保持一致