I'm facing an issue to select the value from the same object. I provided the query below.
I'm migrating a Java J2EE application to Salesforce, the below query works in my SQL
.
I'm trying to do the same in SOQL
, but it doesn't work.
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'))
In the above query I need to take the value where TYPE
is based on 'TECHNIQUE' where KEY1__c
should be matched to DATA1__c
from the outer query.
The query is very similar to this example
SELECT Id
FROM Idea
WHERE ((Idea.Title LIKE 'Vacation%')
AND (CreatedDate > YESTERDAY)
AND (Id IN (SELECT ParentId
FROM Vote
WHERE CreatedById = '005x0000000sMgYAAU'))
The only difference is that IN
clause is used with a different object.
In my query I'm trying to use IN
clause from the same object parameters.
Kindly let me know in case of any further clarifications.
try the following
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);
}
Don't use String use 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;
}
}