Такая ситуация, надо сделать выборку одновременно из 3х обьектов.
Примерная схема: Объект А(поля: Id), Объект B(поля: Id, A.id, C.id) , Объект С(поля: Id)
То есть Объект Б является связующим звеном.
В MySQL я бы сделал так:
SELECT pc.id, dc.Affected_Task__c, dc.Dependency_Type__c, dc.Offset_Days__c, pt.id, pt.Completion_Status__c, pt.Completion_Date__c
FROM Project_Task__c AS pc
INNER JOIN Dependency__c AS dc ON dc.Critical_Task__c = pc.id
INNER Project_Task__c AS pt ON pt.id = dc.Affected_Task__c
WHERE pc.id = 'a09c0000002GXBq'
Но в SF данная конструкция работать не хочет(
Ошибка: expecting right square bracket, found 'INNER' at line 17 column 26
Как правильно составить данный запрос?
Такая ситуация, надо сделать выборку одновременно из 3х обьектов. Примерная схема: Объект А(поля: Id), Объект B(поля: Id, A.id, C.id) , Объект С(поля: Id) То есть Объект Б является связующим звеном. В MySQL я бы сделал так: SELECT pc.id, dc.Affected_Task__c, dc.Dependency_Type__c, dc.Offset_Days__c, pt.id, pt.Completion_Status__c, pt.Completion_Date__c FROM Project_Task__c AS pc INNER JOIN Dependency__c AS dc ON dc.Critical_Task__c = pc.id INNER Project_Task__c AS pt ON pt.id = dc.Affected_Task__c WHERE pc.id = 'a09c0000002GXBq' Но в SF данная конструкция работать не хочет( Ошибка: expecting right square bracket, found 'INNER' at line 17 column 26 Как правильно составить данный запрос?
В Salesforce используется SOQL и он отличается от SQL несмотря на свою внешнюю похожесть.
Join в нем нет, поэтому придется немного сломать свое привычное представление о работе с базой данных.
Вот общее направление куда надо думать:
чтобы обратиться к родителям плоть до 5 уровней вверх надо использовать some_field__r.some_child__r.some_child__r.some_child_field__c
чтобы получить детей, то можно использовать вложенные SOQL.
Опиши то что ты хочешь выбрать словами, и я попробую перевести это на язык SOQL.
В Salesforce используется SOQL и он отличается от SQL несмотря на свою внешнюю похожесть. Join в нем нет, поэтому придется немного сломать свое привычное представление о работе с базой данных. Вот общее направление куда надо думать: чтобы обратиться к родителям плоть до 5 уровней вверх надо использовать some_field__r.some_child__r.some_child__r.some_child_field__c чтобы получить детей, то можно использовать вложенные SOQL. [quote]Примерная схема: Объект А(поля: Id), Объект B(поля: Id, A.id, C.id) , Объект С(поля: Id) То есть Объект Б является связующим звеном.[/quote] Я так понял что это связь многие-ко-многим между A и С (через B) Опиши то что ты хочешь выбрать словами, и я попробую перевести это на язык SOQL.
в SOQL все организовано намного проще чем в традиционой SQL.
иногда мне кажется, что это все вовсе не реляционая БД, а объектная....
посмотри сюда:
http://www.salesforce.com/us/developer/docs/apex_workbook/index.htm
Chapter2 - Tutorial 8 - Lesson 3: Traversing and Querying sObject Relationships
Traversing relationship - одно удовольствие.
Надеюсь эта инфа поможет тебе разобраться в ситуации.
в SOQL все организовано намного проще чем в традиционой SQL. иногда мне кажется, что это все вовсе не реляционая БД, а объектная.... посмотри сюда: [url]http://www.salesforce.com/us/developer/docs/apex_workbook/index.htm[/url] Chapter2 - Tutorial 8 - Lesson 3: Traversing and Querying sObject Relationships Traversing relationship - одно удовольствие. Надеюсь эта инфа поможет тебе разобраться в ситуации.
Den Brown, спс.
Dmitry Shnyrev скинул мне решение:
LIst<Project_Task__c> ptBList = [SELECT Id FROM Project_Task__c WHERE Id in (SELECT Affected_Task__c FROM Dependency__c WHERE Dependency_Type__c = 'Finish to Finnish' AND Critical_Task__c = :ptA_Id) AND (Project_Task__c.Completion_Status__c = null OR Project_Task__c.Completion_Status__c = 'Planned')];
Примерно так.
Пришлось сделать несколько иначе, но подход я понял. Спс!
Сделал так:
Select Affected_Task__c from Dependency__c where (Critical_Task__r.Completion_Date__c != null or Critical_Task__r.Completion_Status__c = 'Planned') and Dependency_Type__c = 'Finish to Finnish' and Critical_Task__c = 'a09c0000002GXBq'
В итоге спимок ИДшников Project_Task__c
Den Brown, спс. Dmitry Shnyrev скинул мне решение: LIst<Project_Task__c> ptBList = [SELECT Id FROM Project_Task__c WHERE Id in (SELECT Affected_Task__c FROM Dependency__c WHERE Dependency_Type__c = 'Finish to Finnish' AND Critical_Task__c = :ptA_Id) AND (Project_Task__c.Completion_Status__c = null OR Project_Task__c.Completion_Status__c = 'Planned')]; Примерно так. Пришлось сделать несколько иначе, но подход я понял. Спс! Сделал так: Select Affected_Task__c from Dependency__c where (Critical_Task__r.Completion_Date__c != null or Critical_Task__r.Completion_Status__c = 'Planned') and Dependency_Type__c = 'Finish to Finnish' and Critical_Task__c = 'a09c0000002GXBq' В итоге спимок ИДшников Project_Task__c