需要将SQL查询转换为Coredata格式

时间:2015-08-01 10:33:18

标签: sql swift core-data nspredicate

SQL查询

select * from zchildren where zparent = 3586 OR zparent in (Select zid from zchildren where zparent = 3586)

我在$SUBQUERY尝试了一些案例,但我仍然没有取得任何成功。那我该怎么做呢?

更新

我的表名是儿童,其中包含相同表ID的ID,其中反向关系现在我想要父母的所有孩子是' 3586' 及其所有子孩子

UPDATE2

我正在附加屏幕截图

enter image description here

现在几点

  1. 表组与儿童的一对多关系
  2. 表儿童有两种关系
  3. 首先是与一对一组相反的
  4. 第二个与自身相反的儿童关系,称为反身
  5. 更新问题

    现在假设我有一个查询我想从儿童表中搜索标题为'医疗' 并且父母&#39 ; 3586' 现在,' 3586' 是来自表的父ID我可以很容易地预测到这一点。

    问题

    它给了我的父母' 3586' 的孩子,但我也想搜索子父的标题,这是子父ID的反身,意味着子孩子来自父母的孩子' 3586'

    我真的需要这个解决方案。如果在这个问题中没有明确的话,我仍然可以更新我的问题。

1 个答案:

答案 0 :(得分:2)

在处理有些复杂的核心数据问题时,您必须更准确一些。你的代码和你的变量名称都是草率的,并且有错误。

在SQL查询中,您有一个属性parent(或“zparent”),但在Core Data模型中,它变为属性而不是关系。 (您是否正在考虑建模ID?这表明您仍然处于关系数据库思维中,并且还没有完全掌握对象图的概念。忘记关键并在关系中思考。)

您需要与children建立反向关系,因此这不一定是相同的关系。调用实体“儿童”令人困惑,因为1)您使用复数形式作为单个对象,2)您将父母和子女称为“儿童”。您还将“儿童”拼错为“Childran”,可能会导致各种错误。

相反,我建议实体名称Person。一个人可以拥有一个或多个parents(或者只有一个?)和一个或多个children,这两个Person也属于Person - parents <<----------------->> children - Person 类型,从而产生多对多关系:

Person - parent <------------------->> children - Person

如果一个人只能拥有一个父母,那当然是多对一的关系。

Person

然后,您可以使用idNumber 3586获取id(请注意,使用person.children 可能也是一个坏主意,因为它在某些上下文中是保留字)。然后,您可以非常简洁地访问该人的孩子:

{{1}}

这就是它的全部内容。