我有一个帐户列表,我想要执行LIKE查询。理想情况下,我的查询类似于:
SELECT id, owner.name FROM Account WHERE name LIKE IN :entityList
我有什么方法可以做到这一点?
问题是我的实体名称来自第三方来源,这意味着可能存在名称的小变化,即
“Bay Ridge apt。” VS“海湾岭公寓”
很难预测拼写的差异在哪里,我希望LIKE过滤器可能是一个神奇的过滤器,可以为我解决这个问题并匹配子串(即“Bay Ridge”)。
如何执行此查询?
谢谢!
编辑:Salesforce指南在其指南中不包含此选项,因此可能无法组合LIKE和IN。也许周围有解决方案? SOQL Comparison Operators
编辑:也许有办法在列表上执行SOSL查询?类似的东西:
Find {entityList} In Account
我似乎无法在任何地方找到这个......
答案 0 :(得分:1)
您可以通过循环实现此目的,并根据您的列表进行动态查询。
String[] entityList = new String []{'CEO','CFO','CMO','CTO','CIO','COO','VP','DIRECTOR','VIP'};
Boolean first = true;
query = 'Select Id FROM CONTACT';
for(String el : entityList){
if(!first){
query += ' OR';
} else {
query += ' WHERE';
}
query = query + ' name LIKE \'%' + el + '%\'';
first = false;
}
答案 1 :(得分:0)
原来,你不需要同时拥有LIKE&在。通过将返回值设置为列表,并在查询中引用迭代器,暗示了IN。此查询同时执行以下操作:
SELECT id, owner.name FROM Account WHERE name LIKE :entityList
见这里: SOQL: Performing Query with both LIKE & IN
此外,似乎不是批量化SOSL查询的好方法