我们正在使用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语句比较表中的两个字段?
感谢任何帮助。
提前谢谢。
答案 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