我遇到来自Core Data生成的查询的SQL错误。这是数据模型:
我想得到所有公共汽车都有活跃乘客的司机。这可以通过以下获取请求和谓词来简单描述,它起作用:
NSFetchRequest(entityName: "Driver")
NSPredicate(format: "ANY bus.passengers.active == YES")
但是,假设我想对乘客进行更复杂的查询,比如他们都是活跃的,并且余额都在100以上。要做这样的查询,我必须使用SUBQUERY
,就像这样:
NSPredicate(format: "SUBQUERY(bus.passengers, $passenger, $passenger.active == YES
AND $passenger.balance > 100).@count > 0")
我希望SUBQUERY
接受一个keypathed集合作为它的第一个参数。它生成以下SQL查询:
SELECT 0,
t0.z_pk,
t0.z_opt,
t0.zbus
FROM zdriver t0
WHERE (SELECT Count(t2.z_3passengers)
FROM zbus t1
JOIN z_1passengers t2
ON t1.z_pk = t2.z_1busses
WHERE ( t0.zbus = t1.z_pk
AND (( t2.zactive = ?
AND t2.zbalance > ? )) )) > ?
错误:'no such column: t2.ZACTIVE'
。看起来它在JOIN
表上缺少ZPASSENGER
。
这是一个核心数据错误还是有不同的方法来编写这个谓词?
更新: Here's a sample project可以重现此问题。
答案 0 :(得分:-1)
尝试获取Bus
实体,避免SUBQUERY
中第一个参数中的关键路径。
正如所指出的,这可以被视为限制或错误。
<强>更新强>:
进一步的研究表明,你的子查询谓词应该真正起作用。我建议您检查NSManagedObject
子类,并确保passengers
返回一个集合,active
已正确列为属性。