Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 检索与两个子对象具有特定关系的核心数据对象_Sql_Core Data_Nspredicate - Fatal编程技术网

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 问题是如

我有一个核心数据实体OrderItem,它与另一个实体OrderItemOption有对多关系。我想查找与两个特定OrderItemOptions有关系的特定OrderItem。如何在核心数据中做到这一点

OrderItemOptions有一个类型代码和optioncode,本质上是一个键/值。我正在寻找一个带有选项(typecode=OptionSet1,optionCode=BT)和另一个选项(typecode=OptionSet2,optionCode=CT)的orderItem

问题是如何区分查询中的第一个OrderItemOption对象和第二个OrderItemOption对象

我能够想出一个SQL查询来做我想做的事情。它使用别名将表与自身连接起来。如何在核心数据中实现等效

sql语句是:

 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==%@子句,我只是将其保留在版本中,并使用子查询与之保持一致