7

我正在尝试根据部分匹配检索一个案例的所有者,我们选择与部分匹配匹配的最新案例。

这是我正在尝试的查询:

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”位数字,您会得到如下案例编号:

  • 0001
  • 0125
  • 1234
  • 33456

可以重新配置您的案例编号以获得以下案例编号以及上述案例编号...

  • 000001
  • 001234
  • 033456

我不想让人们对LIKE声明感到困惑,问题是 001234 和 1234 是不同的情况,所以如果客户提供 1234 并且我找到两条记录,我想开始假设它们是最近的情况。

所以要么考虑LIKE语句或IN包含的语句('001234', '1234')

4

4 回答 4

1

我找不到指定LIMIT和/或ORDER BY不适用于子查询的文档,但是我遇到了您提到的相同错误。

但是,从Case对象开始查找User可能会起作用,类似于 SOQL文档中的查找关系和外部联接部分。我不确定这是否适合您,但您可能想尝试一下。

这是一个例子:

- 编辑 -

SELECT OwnerId, Owner.CustomField__c FROM Case WHERE CaseNumber LIKE '%1026' ORDER BY CreatedDate DESC LIMIT 1

原来自定义字段不可访问,因为 OwnerId 是一个引用GroupUser的多态键。这意味着上述方法不起作用,对不起。

要解决这个问题非常复杂。您必须创建一个名为“用户所有者”的自定义查找字段,或其他内容。如果所有者是用户,将存储对User的查找引用(这可以通过将 OwnerId 的开头与用户 ID 前缀“005”进行比较来检查)。该字段需要在更新触发器之后使用插入后填充。这个新字段的所有值都需要为先前存在的Cases加载数据。但是,一旦有了这个新的“用户所有者”字段,您就可以使用它通过 SOQL 访问用户上的自定义字段。

于 2011-11-17T14:36:26.173 回答
1

ORDER BY并且LIMIT在您的子查询中没有意义,因为您没有从子查询返回记录。相反,子查询只是构建一个用于过滤主查询的 ID 列表。

如果您以返回子查询记录的方式使用子查询,则这些子句很好。例如,这有效:

SELECT Name, 
    (SELECT FirstName, LastName FROM Contacts ORDER BY LastName LIMIT 10) 
FROM Account
于 2011-11-17T15:40:56.027 回答
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
于 2014-04-23T17:24:57.910 回答
0

您是否尝试将您的查询切换为这样的?

SELECT OwnerId, (select id from user)
    FROM Case 
    WHERE Case.CaseNumber LIKE '%1026' 
    ORDER BY Case.CreatedDate DESC LIMIT 1
于 2012-09-24T14:31:09.150 回答