Как правило, с помощью Core Data вы разрабатываете и используете модель данных, соответствующую вашим потребностям. Вы не должны думать об этом с точки зрения SQL - ему даже не нужно использовать SQL для хранения - и при этом вы не должны пытаться напрямую переводить SQL-запрос в запрос выборки с предикатом и т. Д.
Тем не менее, иногда бывает полезно подумать о терминах SQL WHERE при построении предикатов, но на самом деле выборочные запросы сводятся к тому, какую сущность вам нужно получить и как фильтровать и / или сортировать коллекцию и т. Д.
Запросы на выборку ограничены одной сущностью, поэтому я думаю, что вам потребуется несколько запросов на выборку для имитации вашего запроса.
Как выглядит ваша модель данных Core Data? Что вы пытаетесь достичь? Что вы пробовали до сих пор?
UPDATE
Похоже, ваша модель данных включает в себя две сущности: Drink и Ingredient, между которыми существует отношение «многие ко многим»:
Напиток << - >> Ингредиент
Обратите внимание, что в Core Data нет сущности DrinkIngredient, если вы не создадите ее явно (есть дополнительная таблица для отношения многие ко многим, но она абстрагируется от вас). Так как вам нужно значение суммы, связанное со строками в дополнительной таблице, я бы рекомендовал добавить сущность DrinkIngredient в Базовые данные:
Drink <- >> DrinkIngredient << -> Ингредиент
Примечание: у DrinkIngredient есть ровно один Напиток и один Ингредиент. Напитки могут содержать много ингредиентов Drink, а ингредиенты могут использоваться многими ингредиентами Drink.
Звучит так, будто вы хотите получить название и сумму для списка ингредиентов для конкретного напитка. Для этого просто извлеките объекты DrinkIngredient с предикатом фильтра, например так:
// assuming "aDrink" is a reference to a particular Drink object
// and "drink" is the relationship from DrinkIngredient to Drink
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"drink == %@",aDrink];
// if the fetch request result array is named "ingredientList"
// and the relationship from DrinkIngredient to Ingredient is "ingredient"
for (DrinkIngredient *di in ingredientList) {
NSString *ingredientName = di.ingredient.name;
NSUInteger amount = di.amount.integerValue;
// use "ingredientName" and "amount" here
}
Поскольку вы используете Core Data, а не SQL, вы делаете все по-другому. Например, если вы хотите отобразить список ингредиентов с названием и количеством для всех напитков, вы просто получите все объекты Drink (без предиката фильтра) и получите доступ к ингредиентам через связь между Drink и DrinkIngredient.
Опять же, вы должны подумать о том, что вы пытаетесь выполнить, спроектировать и правильно использовать вашу модель данных. Вы не должны думать о SQL или запросах.