2013-07-27 53 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

@阿倫抱歉的誤解,請參閱我的回答下面 –

回答

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編譯錯誤:字段表達式的初始術語必須是一個具體的SObject:字符串在行29列41附近key.KEY1__c這是什麼問題?你能不能幫我 – Arun

+0

@Arun請張貼控制器 –

+0

公共類LookUpController { 公開名單 getParamters(){ 列表 pereTechniqueParams =新名單()的整個代碼; for(String key1:[SELECT KEY1__c FROM Parameters__c WHERE TYPE__c ='PERE_TECHNIQUE']){pereTechniqueParams。添加(paramKey1.KEY1__c); } List 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; } } – 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