我在测试从 Jitterbit 调用的 SOQL 语句时收到错误"Bind variables only allowed in Apex Code [MALFORMED QUERY]"



我们正在使用Jitterbit来查询Salesforce的记录,但是我们遇到了一个问题。在查询条件语句中,我比较了Salesforce表中的两个字段。当我去测试查询时,它给了我一个错误"绑定变量只允许在Apex代码[MALFORMED query]"。

下面是一个查询的例子:

SELECT Id FROM Price_Agreement_Item__c WHERE Approved_Date__c > Last_Upload_Date__c

字段Approved_Date__cLast_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

相关内容

最新更新