Salesforce SOQL中的子查询排序和限制

Salesforce SOQL中的子查询排序和限制,salesforce,soql,Salesforce,Soql,我正在尝试根据部分匹配检索案例的所有者,其中我们选择与部分匹配匹配的最新案例 这是我正在尝试的查询: 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 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
同样,如果我放弃订单并限制其工作:

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 我不想让人们被类似的陈述弄糊涂,问题是001234和1234是不同的案例,所以如果客户提供1234,我发现两个记录,我想首先假设它们是最新的案例


因此,请考虑类似的语句或包含“001234”、“1234”< /P> < P>的语句,我找不到文档,它指定了不与子查询一起使用的限制和/或命令,但我遇到了与您提到的错误。

但是,可以从Case对象开始查找用户,类似于SOQL中的Lookup Relationships和Outer join部分。我不确定这是否适合你,但你可能想试试

下面是一个例子:

-编辑-

选择OwnerId,Owner.CustomField\uu\c 从哪来的 案例编号,如“%1026” 按CreatedDate DESC排序 限制1

由于OwnerId是引用组或用户的多态键,因此无法访问自定义字段。这意味着上述方法无效,对不起

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

在您的子查询中,ORDER BY和LIMIT没有意义,因为您没有从子查询返回记录。相反,子查询只构建用于筛选主查询的ID列表

如果以返回子查询记录的方式使用子查询,则可以使用这些子句。例如,这项工作:

SELECT Name, 
    (SELECT FirstName, LastName FROM Contacts ORDER BY LastName LIMIT 10) 
FROM Account

你有没有试着把你的问题变成这样

SELECT OwnerId, (select id from user)
    FROM Case 
    WHERE Case.CaseNumber LIKE '%1026' 
    ORDER BY Case.CreatedDate DESC LIMIT 1

我认为值得补充的是,由于SOQL的新特性在第一次提出和回答这个问题时是不可用的,因此从Case查询的方法现在应该是可行的,可以访问自定义字段

特别是,TYPEOF功能通过多态查找提供对特定类型字段的访问:

值得注意的是,此功能仍在开发人员预览中


您好,Matthew,我不认为您可以在关系查询中选择自定义字段,您只能访问在不同类型的所有者中相同的公共字段。不幸的是,这就是我不得不转移到子查询的原因。啊,你说得对。OwnerId是一个多态密钥;它可以引用组或用户。这使得用户上的自定义字段无法访问。不过,这给了我另一个想法。我正在尝试做的想法是有意义的-如果有多个案例具有相同的案例编号,我只想使用最近的一个。-不要让我开始解释为什么可以复制病例编号。我明白了。我不知道如何在单个SOQL查询中实现这一点。尽管此查询可以工作,但它不允许您访问自定义字段。
SELECT 
  TYPEOF Owner
    WHEN User THEN CustomField__c
  END
FROM CASE