Nic*_*nco 8 salesforce soql jitterbit
我们使用Jitterbit来查询Salesforce中的记录,但是我们遇到了一个问题.在查询条件语句中,我正在比较Salesforce表中的两个字段.当我去测试查询时,它给出了错误"仅在Apex代码[MALFORMED QUERY]中允许绑定变量".
以下是查询示例:
SELECT Id FROM Price_Agreement_Item__c WHERE Approved_Date__c > Last_Upload_Date__c
字段Approved_Date__c和Last_Upload_Date__c都包含在Salesforce表Price_Agreement_Item__c.如何创建一个SOQL语句来调整select语句比较表中的两个字段?
任何帮助表示赞赏.
先感谢您.
abh*_*kbh 19
除了Daniel Ballinger所说的,Soap API也不允许在SOQL查询中使用'IN'子句.这是愚蠢的,但是再一次,这是Salesforce的95%.
SOQL当前不支持WHERE子句中的直接字段到字段比较.从SOQL的WHERE子句中的字段到字段比较
SOQL的WHERE子句中的字段到字段比较
知识产品编号:000187460
描述
我想通过比较WHERE子句中同一对象的两个字段来执行查询,但是我无法在WHERE子句中使用条件右侧的字段:Run Code Online (Sandbox Code Playgroud)List<user> users = [SELECT Id,name FROM User WHERE (FirstName != Lastname)];上面的查询返回:"System.QueryException:unexpected token:'Lastname'"
解决方案
Salesforce不允许在SOQL查询中进行直接的字段到字段比较.为此,您可以创建一个公式字段,该字段将比较字段并返回您可以在WHERE子句中使用的值(如true或false).
因此,对于上面的查询,您可以在User对象上创建一个公式字段,返回类型为Text,例如NameCompare,公式为IF(User.FirstName!= User.LastName,'true','false')
现在我们的查询将是:
Run Code Online (Sandbox Code Playgroud)List<User> Users = [SELECT id, name FROM User where NameCompare= 'true'];在ideaexchange门户上发布了以下想法,允许在SOQL中进行字段到字段的比较:
https://success.salesforce.com/ideaView?id=08730000000BrHAAA0
您可以创建类型为Checkbox 的公式字段以返回布尔值:
Approved_Date__c > Last_Upload_Date__c
然后使用WHERE子句重写您的查询,如:
SELECT Id  
FROM Price_Agreement_Item__c 
WHERE Approved_Date_Greater_Than_Last_Upload_Date__c = true
请注意扫描需要多少行.它不能使用索引,因此将导致全表扫描.如果行数太大,您可能会遇到其他错误.
顺便提一下,Salesforce Stack Exchange是询问Salesforce特定问题的好地方.这个答案引用了Jesse Altman在回答问题时提出的问题以及Keith C和sfdcfox的评论.
| 归档时间: | 
 | 
| 查看次数: | 19602 次 | 
| 最近记录: |