sql - 如何在 SOQL 中对同一对象进行内部或子查询

标签 sql salesforce inner-join soql in-clause

我在从同一对象中选择值时遇到问题。我提供了下面的查询。

我正在将 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',其中 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 子句。

如有任何进一步说明,请告知我。

最佳答案

尝试以下操作

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];

更新:

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;
    }
}

关于sql - 如何在 SOQL 中对同一对象进行内部或子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17901453/

相关文章:

sql - 如何在表中创建总和为 1 条 sql 的行

c# - 如何删除整个数据库并使用 sql 和 c# 重新创建它?

ios - 来自 salesforce 的 iOS 中格式错误的 json

unit-testing - 基本单元测试,检查我是否具有对某个字段的读取访问权限 - Apex

mysql按组限制记录加上内联多个表

mysql - 如何创建Mysql动态带条件查询语句

php - 按字母和数字排序 MySQL 结果(A1、B2、B3、C2)

html - 如何更改此文本框的大小?

SQL Server 连接其他表中不存在的位置

mysql - 多案例内连接查询