NSPredicate を使う。
例えば、Customer(マスタ)<−−−>> Karte(ディティール)というモデルがあり、特定の Customer に紐づく Karteの一覧を取得する場合。
// Edit Predicade
NSPredicate* predicate =
[NSPredicate predicateWithFormat:@"customer == %@", customer];
[request setPredicate:predicate];
オブジェクトが条件の場合でも上記のように等号条件として書ける。
SQLite のログはこう。
SELECT 0, t0.Z_PK FROM ZKARTE t0 WHERE t0.ZCUSTOMER = ? ORDER BY t0.ZOPERATEDDATE DESC SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZMODIFIEDDATE, t0.ZFEE, t0.ZMEMO, t0.ZCREATEDDATE, t0.ZOPERATEDDATE, t0.ZCUSTOMER FROM ZKARTE t0 WHERE t0.Z_PK IN (?,?,?) ORDER BY t0.ZOPERATEDDATE DESC LIMIT 20
最初に Customer を条件にして合致する Karteの PK(Primary Key)を取得している。そして、取得した PK を SELECT ...IN( ) の条件として Karteのデータを得る。
# 合致する Karte が1万件あったら、IN (1万件の PK)となるのだろうか。
(追記)通常、LIMIT 制限するのでそんなことはおこらない。
※iPhone OS 3.1.3 用コードで確認