Как сделать сложный запрос на выборку в Core data
Я реализовал основные данные для хранения в моем приложении. Мне нужно выполнить сложные выборки, используя FetchRequest и предикат, как показано ниже SQLite запроса:
SELECT
diagnosis_drug.drug_id,
diagnosis_drug.weight_bracket_id,
score,
localscore,
(score + localscore) AS score,
drug.*
FROM diagnosis_drug
INNER JOIN drug
ON diagnosis_drug.drug_id = drug.id
WHERE diagnosis_drug.doctor_id = 3
AND diagnosis_id IN (29, 212)
AND score > 0
AND weight_bracket_id = 1
AND diagnosis_drug._d = 0
ORDER BY score DESC
здесь Diagnostic_rug & drug - это объекты, а другие - это атрибуты.
Entity : Diagnosis_drug
Attributes :
diagnosisId - Int32
doctorId - Int32
drugId - Int32
score - Int32
localScore - Int32
Entity : Drug.
Attributes :
id : Int32
dosage : Int32
volume : Int32
genericName : String
formulation : String
doseType : String
duration : Int32
name : String
Атрибут "id" препарата равен атрибуту "drugId" Diagnosis_drug. Запрос состоит в том, чтобы получить лекарства с наибольшим количеством баллов от Diagnosis_drug, и внутреннее соединение выполняется с объектом Drug, чтобы получить его данные.
1 ответ
Итак, я обнаружил, что есть несколько ограничений для основных данных. Вы можете выполнить fetchrequest для двух разных сущностей, только когда они имеют отношение между ними. а именно если у вас есть отношение один к одному между Person(entity_1) и его мобильным телефоном (entity_2), для получения обоих нам необходимо выполнить выборку для объекта Person. Чтобы установить фильтр для Person, мы добавим предикат, как нам нужно, и для установки фильтра на мобильный телефон, мы поставим "SUBQUERY" для атрибутов мобильного телефона в том же предикате. Если две сущности не имеют отношения, есть обходной путь. Вы делаете эти две сущности суб-сущностью новой родительской сущности и выполняете выборку для новой родительской сущности ( см. Ссылку!). Тем не менее, это оставляет нас в случаях, когда у этих двух сущностей уже есть некоторые другие Родители! Здесь нет ни отношения, ни общего родительского объекта. Итак, вот ограничение основных данных. Вам нужно будет выполнить выборку для обоих таких объектов отдельно. Также базовые выборки данных не допускают вычислений внутри предикатов запросов (вам нужно будет поддерживать дополнительную переменную в вашей сущности и обновлять ее каждый раз, когда вам нужно). Любые исправления в моих выводах приветствуются. Благодарю.