我正在尝试根据部分匹配检索案例的所有者,我们选择与部分匹配匹配的最新案例。
这是我正在尝试的查询:
SELECT User.CustomField__c
FROM User
WHERE User.Id IN (
SELECT OwnerId
FROM Case
WHERE Case.CaseNumber LIKE '%1026'
ORDER BY Case.CreatedDate DESC LIMIT 1)
以下查询本身有效,但作为子查询的一部分似乎并不高兴:
SELECT OwnerId
FROM Case
WHERE Case.CaseNumber LIKE '%1026'
ORDER BY Case.CreatedDate DESC LIMIT 1
同样,如果我放弃ORDER BY
和LIMIT
,则可以使用
SELECT User.NVMContactWorld__NVM_Agent_Id__c
FROM User
WHERE User.Id IN (
SELECT OwnerId FROM Case
WHERE Case.CaseNumber LIKE '%1026')
SOQL子查询中是否不允许进行订单/限制查询?
为了澄清这个问题,我正在处理的场景看起来像这样......
Salesforce组织可以为案例编号配置“显示格式”。如果他们选择“4”数字,您将获得如下案例编号:
可以重新配置您的案例编号,以获得以下案例编号以及以上案例编号......
我不希望人们对LIKE
声明感到困惑,问题是001234和1234是不同的情况,所以如果客户提供1234并找到两条记录,我想开始假设他们是最近的案例。
因此要么考虑LIKE
语句,要么考虑包含IN
的{{1}}语句
答案 0 :(得分:1)
我找不到任何文档,指出LIMIT
和/或ORDER BY
不适用于子查询,但我遇到了您提到的相同错误。
但是,可以从 Case 对象开始,然后查看 User ,类似于SOQL中的Lookup Relationships和Outer Joins部分{{3 }}。我不确定这对你是否有用,但你可能想尝试一下。
以下是一个例子:
- 编辑 -
<击> SELECT OwnerId,Owner.CustomField__c FROM Case WHERE CaseNumber LIKE'%1026' ORDER BY CreatedDate DESC 限制1 击>
原来不能访问自定义字段,因为OwnerId是引用组或用户的多态键。 这意味着以上内容无效,抱歉。
要解决这个问题非常复杂。您必须创建一个名为“用户所有者”的自定义查找字段,或者其他内容。如果所有者是用户,这将存储对用户的查找引用(可以通过将OwnerId的开头与'005'进行比较来检查,用户ID前缀)。在更新触发器之后,需要使用后插入来填充该字段。此新字段的所有值都需要为以前存在的 Cases 进行数据加载。但是,一旦您拥有了这个新的“用户所有者”字段,您就可以通过SOQL访问User上的自定义字段,并使用它。
答案 1 :(得分:1)
ORDER BY
和LIMIT
在子查询中没有意义,因为您没有从子查询返回记录。相反,子查询只是构建一个用于过滤主查询的ID列表。
如果以返回子查询记录的方式使用子查询,则这些子句可以正常使用。例如,这有效:
SELECT Name,
(SELECT FirstName, LastName FROM Contacts ORDER BY LastName LIMIT 10)
FROM Account
答案 2 :(得分:1)
我认为值得补充的是,在首次询问和回答此问题时,SOQL的新功能尚不可用,现在查询Case的方法应该是可行的(可以访问自定义字段)。
特别是TYPEOF功能通过多态查找提供对特定类型字段的访问:http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_soql_select_typeof.htm
值得注意的是,此功能仍在开发者预览版中。
SELECT
TYPEOF Owner
WHEN User THEN CustomField__c
END
FROM CASE
答案 3 :(得分:0)
您是否尝试将查询切换为类似的内容?
SELECT OwnerId, (select id from user)
FROM Case
WHERE Case.CaseNumber LIKE '%1026'
ORDER BY Case.CreatedDate DESC LIMIT 1