我有以下核心数据:
我要做的是获取所有 producto categoria.name 值“carne”并且同时时间有 supermercado.name 值“Mercadona”
在SQL中的看起来像这样:
select p.*
from producto as p inner join categoria as c on p.id = c.producto_id
inner join supermercado as s on p.id = s.producto_id
where c.name = "carne" AND s.name = "Mercadona";
在sql中很简单,我们进行连接,在where子句中我们过滤我们想要选择的元素。
有一次,我们知道我们想做什么我试图用核心数据和swift提供给我们的谓词来编写这些查询。但我没有取得好成绩。
let p1 = NSPredicate(format: "SUBQUERY(supermercados, $supermercado, ANY $supermercado.name == %@).@count > 0", super_name)
let p2 = NSPredicate(format: "SUBQUERY(categorias, $categoria, ANY $categoria.name == %@).@count > 0",categoria)
fetchrequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [p1, p2])
我编写了两个谓词,然后使用和谓词连接它们,但我只有一个问题。是应该返回3个产品:“ rioja ”和“ carne_demigrante ”但只返回一个对象并非全部
当我在没有子查询的情况下编写谓词时,我遇到了完全相同的问题,它只返回了一个对象而不是我在“producto”中使用该属性的3个对象。
所以一百万美元的问题是,我怎样才能返回所有具有此条件的对象而不是仅返回 ONE 对象?
答案 0 :(得分:0)
我不明白为什么你需要使用SUBQUERY而不是更简单的“加入”
let p1 = NSPredicate(format: "ANY supermercados.name like %@", super_name)
let p2 = NSPredicate(format: "ANY categorias.name like %@" ,categoria)
fetchrequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [p1, p2])