我们正在使用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语句来约束比较表中两个字段的选择语句?
任何帮助都是感激的。
提前感谢。
除了Daniel Ballinger所说的,Soap API也不允许在SOQL查询中使用' In '子句。这是愚蠢的,但话又说回来,这是95%的Salesforce。
SOQL目前不支持在WHERE子句中直接进行字段到字段的比较。SOQL WHERE子句中字段到字段的比较
SOQL WHERE子句中字段到字段的比较
知识文章编号:000187460
我想通过比较WHERE子句中同一对象的两个字段来执行查询,但是我不能使用中的字段WHERE子句中条件的右侧:List<user> users = [SELECT Id,name FROM User WHERE (FirstName != Lastname)];
上面的查询返回:"System. "QueryException:意外的token:'姓' "
Salesforce不允许在SOQL查询中直接进行字段与字段的比较。要实现这一点,您可以创建一个公式字段进行比较字段并返回一个值(如true或false),您可以在WHERE子句.
所以对于上面的查询,您可以在User上创建一个公式字段返回类型为Text的对象,例如NameCompare,带有公式如果用户。=用户名。LastName, 'true', 'false')
现在我们的查询将是:
List<User> Users = [SELECT id, name FROM User where NameCompare= 'true'];
以下想法已张贴在思想交流门户网站允许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的评论下回答的问题。另一种方法是将查询复制到命令行并运行它,而不转义任何字符串常量周围的引号。
。:
curl -X GET https://x.salesforce.com/services/data/v31.0/query?q=SELECT%20COUNT()%20FROM%20YourObj%20WHERE%20field%20!=%20'Good'
应该是这样的:
curl -X GET https://x.salesforce.com/services/data/v31.0/query?q=SELECT%20COUNT()%20FROM%20YourObj%20WHERE%20field%20!=%20%27Good%27