我收到错误"绑定变量只允许在Apex Code [MALFORMED QUERY]"测试从Jitterbit调用的SOQL语句时

时间:2014-07-25 15:45:48

标签: 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__cLast_Upload_Date__c都包含在Salesforce表Price_Agreement_Item__c中。如何创建一个SOQL语句来调整select语句比较表中的两个字段?

感谢任何帮助。

提前谢谢。

3 个答案:

答案 0 :(得分:15)

除了Daniel Ballinger所说的,Soap API也不允许使用' IN' SOQL查询中的子句。 这是愚蠢的,但是又一次,是Salesforce的95%。

答案 1 :(得分:6)

SOQL当前不支持WHERE子句中的直接字段到字段比较。来自Field to field comparison in WHERE clause of SOQL

  

SOQL

的WHERE子句中的字段到字段比较      

知识产品编号:000187460

     

<强>描述
  我想通过比较WHERE子句中同一对象的两个字段来执行查询,但我无法使用字段   WHERE子句中条件的右侧:

List<user> users = [SELECT Id,name FROM User WHERE (FirstName != Lastname)];
     

上面的查询返回:“System.QueryException:意外的令牌:   '姓氏'“

     

解决
  Salesforce不允许在SOQL查询中进行直接的字段到字段比较。

     

要实现此目的,您可以创建一个将进行比较的公式字段   字段并返回一个值(如真或假),您可以在其中使用   WHERE子句。

     

因此,对于上述查询,您可以在User上创建公式字段   返回类型的对象文本,例如NameCompare,带公式   IF(User.FirstName!= User.LastName,'true','false')

     

现在我们的查询将是:

List<User> Users = [SELECT id, name FROM User where NameCompare= 'true'];
     

以下想法已发布在ideaexchange门户网站上以供允许   SOQL中的字段到字段比较:

     

https://success.salesforce.com/ideaView?id=08730000000BrHAAA0

你可以创建一个类型为Checkbox的formula field来返回一个布尔值:

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的评论。

答案 2 :(得分:1)

另一种方法是将查询复制到命令行并运行它而不转义任何字符串常量的引号。

,例如:

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