SELECT DISTINCT我正在 Oracle 19c 中调试一个查询,该查询试图按不在查询中的字段对结果进行排序。(注意:这是错误的做法,请勿这样做。)
此查询尝试返回一个唯一的客户名称列表,首先按最近的销售日期排序。它返回预期错误“ORA-01791:不是 SELECTed 表达式”。
SELECT DISTINCT CUSTOMER_NAME
FROM SALES
ORDER BY LAST_SALE_DATE DESCENDING;
Run Code Online (Sandbox Code Playgroud)
它返回错误,因为查询尝试按尚未选择的字段对结果进行排序。到目前为止这是有道理的。
但是,如果我只是添加FETCH FIRST 6 ROWS ONLY到查询中,它不会返回错误(尽管结果不正确,所以不要这样做)。但问题是为什么Oracle不返回错误信息呢?
SELECT DISTINCT CUSTOMER_NAME
FROM SALES
ORDER BY LAST_SALE_DATE DESCENDING
FETCH FIRST 6 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)
为什么添加会FETCH FIRST 6 ROWS ONLY起作用?
补充:如果有多个具有相同名称和日期的记录,则错误的查询将返回重复项。搜索诸如“sql select unique order by another column”之类的内容将显示几种正确的方法来执行此操作。
我正在使用 Jackson 2.7.5 和 Jersey 2.25.1。我正在尝试修复现有的生产代码,当它在 JSON 输入中获取意外字段时,该代码现在因“UnrecognizedPropertyException:无法识别的字段”而失败。
在研究这个问题时,我发现了几篇旧帖子(5 年以上)建议的各种修复措施与我当前的代码非常不同。我没有太注意这些,因为它们是旧版本的 Jackson/Jersey 的。最近的建议,包括 Jersey 自己的文档(https://jersey.github.io/documentation/latest/media.html#json.jackson),看起来与我已经有了的非常相似。事实上,在我看来,我现有的代码似乎已经遵循了当前的做法。但是,Jersey 似乎忽略了我的自定义 ObjectMapper 设置...
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false
Run Code Online (Sandbox Code Playgroud)
我很确定该设置应该可以修复该错误,但 Jersey 似乎使用默认的 ObjectMapper 而不是我的自定义设置。
首先,这是依赖项信息,我相信它与 Jersey 文档中显示的内容相匹配(https://jersey.github.io/documentation/latest/media.html#json.jackson)。
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jersey.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这是返回错误的调用:
// this will throw an exception if it can't convert the string to the class
PropSearchResponse propResponse = null;
try {
propResponse = getResponse.readEntity(PropSearchResponse.class);
} catch(final ProcessingException e) {
throw new ProcessResultException(Code.FAILED, "failed to map from prop response", e);
}
Run Code Online (Sandbox Code Playgroud)
这是我的自定义 ObjectMapper 的原始代码: …
我试图分析一段包含以下内容的Perl代码:
unless( @{$avl->Rates() || []} ) {
if(!$nobar) { push @rptmp, 'BAR' unless @rptmp; }
}
Run Code Online (Sandbox Code Playgroud)
我觉得我理解的内心动作.这意味着"如果$ nobar为false(在这种情况下为0),则将字符串'BAR'添加到数组中,@rptmp除非@rptmp已经存在."
我遇到麻烦的部分是第一个"除非"条件:unless ( @{$avl->Rates() || []} ).$avl->Rates()是一个返回列表的函数(或者可能是指向列表的指针?).但对我来说真正令人困惑的部分是|| [].这是"或"某事,因此除非不$avl->Rates()返回任何内容,否则不会选中它.但我不确定它是做什么的,特别是空方括号.如果它返回一些空的东西,它不会总是错误吗?还有,有更好的,或者至少更清晰的方式来写这个吗?