2013-07-27 3 views
2

У меня возникла проблема с выбором значения из того же объекта. Я привел запрос ниже.Как выполнить внутренний или подзапрос для одного и того же объекта в SOQL

Я переношу приложение Java J2EE в Salesforce, нижеследующий запрос работает в моем SQL.
Я пытаюсь сделать то же самое в SOQL, но это не сработает.

SELECT DATA1__c, TEXT__c 
    FROM PARAMETERS__c 
    WHERE ((TYPE__c = 'ADMINISTRATEUR') 
     AND (KEY1__c LIKE 'MONTAGE%') (AND KEY2__c = '')) 
     AND (DATA1__c 
        IN (SELECT KEY1__c 
         FROM Parameters__c 
         WHERE TYPE__c = 'PERE_TECHNIQUE')) 

В приведенном выше запросе я должен принимать значение, где TYPE основан на 'TECHNIQUE' where KEY1__c должен быть согласован с DATA1__c от внешнего запроса.

Запрос очень похож на данном примере

SELECT Id 
    FROM Idea 
    WHERE ((Idea.Title LIKE 'Vacation%') 
     AND (CreatedDate > YESTERDAY) 
     AND (Id IN (SELECT ParentId 
        FROM Vote 
        WHERE CreatedById = '005x0000000sMgYAAU')) 

Единственное отличие состоит в том, что IN предложение используется с другим объектом. В моем запросе я пытаюсь использовать предложение IN из тех же параметров объекта.

Пожалуйста, дайте мне знать в случае каких-либо дополнительных разъяснений.

+0

@Arun пожалуйста, напишите ваш 'SOQL' запрос –

+0

@Pavel я уже дал мой SOQL запрос. Вышеупомянутый на объекте параметра, любезно сообщите мне в случае каких-либо дальнейших расследований – Arun

+0

@Arun извините за недоразумение, см. Мой ответ ниже –

ответ

1

попробуйте следующее

List<String> pereTechniqueParams = new List<String>(); 
for (String key: 
      [SELECT KEY1__c FROM Parameters__c WHERE TYPE__c = 'PERE_TECHNIQUE']) { 
    pereTechniqueParams.add(key.KEY1__c); 
} 

List<Parameters__c> params = [SELECT DATA1__c, TEXT__c 
            FROM PARAMETERS__c 
            WHERE (TYPE__c = 'ADMINISTRATEUR' 
             AND KEY1__c LIKE 'MONTAGE%' 
             AND KEY2__c = '') 
             AND DATA1__c IN:pereTechniqueParams]; 

UPDATE:

for (Parameters__c key1 : [SELECT KEY1__c 
        FROM Parameters__c WHERE TYPE__c = 'PERE_TECHNIQUE']) { 
    pereTechniqueParams.add(key1.KEY1__c); 
} 

Не используйте строки используйте Parameters__c

public class LookUpController { 
    public List<Parameters__c> getParamters() { 
     List<String> pereTechniqueParams = new List<String>(); 
     for (Parameters__c key1 : [SELECT KEY1__c 
          FROM Parameters__c WHERE TYPE__c = 'PERE_TECHNIQUE']) { 
      pereTechniqueParams.add(key1.KEY1__c); 
     } 
     List<Parameters__c> params = [SELECT DATA1__c, TEXT__c 
           FROM PARAMETERS__c 
           WHERE TYPE__c = 'ADMINISTRATEUR' 
            AND KEY1__c LIKE 'MONTAGE%' 
            AND KEY2__c = '' 
            AND Data1__c IN: pereTechniqueParams]; 
     return params; 
    } 
} 
+0

Привет, Павел, Большое спасибо за ваш быстрый ответ, и я понял, как делать подзапросы для одного и того же объекта. Я пытаюсь реализовать решение, данное вами. Но я получаю сообщение об ошибке: LookUpController Compile Error: Начальный термин выражения поля должен быть конкретным SObject: Строка в строке 29 столбца 41, которая находится рядом с ключом. KEY1__c в чем проблема? могли бы вы помочь мне – Arun

+0

@Arun пожалуйста, напишите весь код контроллера –

+0

общественного класса LookUpController { общественного List getParamters() { Список pereTechniqueParams = новый список (); for (String key1: [SELECT KEY1__c FROM Parameters__c WHERE TYPE__c = 'PERE_TECHNIQUE']) {pereTechniqueParams.добавить (paramKey1.KEY1__c); } Список PARAMS = [SELECT DATA1__c, TEXT__c ОТ PARAMETERS__c ГДЕ TYPE__c = 'Administrateur' И KEY1__c LIKE 'MONTAGE%' И KEY2__c = '' И Data1__c В: pereTechniqueParams]; return params; } } – Arun

1

Вотум Id и идея Id не совпадает, список внутреннего обратного выбора голосов, а есть не результат для подзапроса Id IN (SELECT ParentId FROM Vote....

Channge коды Для

set<Id> ideaIdSet = new set<Id>(); 
for(Vote vote : [SELECT ParentId FROM Vote WHERE CreatedById = '005x0000000sMgYAAU']){ 
    ideaIdSet.add(vote.ParentId); 
} 

SELECT Id 
    FROM Idea 
    WHERE ((Title LIKE 'Vacation%') 
     AND (CreatedDate > YESTERDAY) 
     AND (Id IN ideaIdSet) 
+0

Я никогда не задавал вопрос на примере запросить его только для понимания, которое я дал ему и уже он отлично работает. мой вопрос касается вышеуказанного запроса объекта параметров. Спасибо заранее за ответ. Пожалуйста, дайте мне знать в случае каких-либо дополнительных разъяснений. – Arun