我如何用这个做出谓词?

时间:2011-04-06 17:04:44

标签: sql ios subquery nspredicate

我有一个语言实体,用于存储文本及其附带的语言代码。我需要获取用户所选语言的所有文本列表,除非该语言中没有特定的文本行,在这种情况下我需要获得英文版本。

我的表基本上是这样的,用SQL术语:

DECLARE TABLE Languages
(
    textId int,
    languageCode char(2),
    text varchar(2000)
)

将textId和languageCode作为我的主键。

在SQL中,我基本上会这样做:

SELECT ISNULL(l.text, e.text)
FROM
    (SELECT * FROM Languages WHERE languageCode = 'en') t
    LEFT JOIN
    (SELECT * FROM Languages WHERE languageCode = @selectedLanguage) l
    ON l.textId = t.textId

这应该为每个textId准确地给我一段文字;如果找不到selectedLanguage,请使用英语。

是否可以使用NSPredicate和FetchedResultsController执行此类操作?我在SUBQUERY关键字上找到了一些信息,但没有真正解释如何将它与NSPredicate一起使用。

1 个答案:

答案 0 :(得分:0)

好的,所以我能够以一种不同的,更简单的方式做到这一点......

[NSPredicate predicateWithFormat:
    @"language.languageCode == %@ OR
    (language.languageCode = 'en' AND NOT (question IN %@))", languageCode, foundLanguages]

其中foundLanguages是我所选语言中所有文本的数组。它确实需要一个额外的获取请求来获取所选语言的所有文本列表,但它会准确返回所需的内容。比我在SQL中思考的左连接和子查询更简单。可能效率低下。