问题标签 [subquery-factoring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
58 浏览

sqlite - query limit constraint propagation into subquery

Here my streamlined situation

I then have an outer SELECT whose purpose is to print out the table t1 for a select list of ID (i)

The ID set is generated so I can end up with

Sometimes the ID set is the result of an inner SELECT subquery like this

In my real case t1 and t2 are big and the inner SELECT can generate a big ID list, that the outer select will nuke with its limit constraint.

My question is, does the query optimiser detect this outter limit constrainst and propagate it into the inner select?

If the answer is NO, then I should go the extra mile and my query generator, got to move the limit constraint explicitly in the inner SELECT like this

Before asking I looked EXPLAIN and EXPLAIN QUERY PLAN but this is beyond my knowledge and could not answer from there.

0 投票
1 回答
132 浏览

sql - 如何在 SQL 中操作值并获得新结果?

我有这个查询:

此查询将返回一些重复的客户姓名,因为他们有不同的种族和民族。

例子:

我想知道是否有任何方法可以说如果种族不是=种族应该是多种族的,如果种族不是=彼此相同的ID选择最后更新的。

PS.Ethnicity有时间戳,我可以使用Max(e.LastUpdate)

我想也许一个子查询可以提供帮助!

任何帮助或想法将不胜感激!

0 投票
1 回答
220 浏览

oracle - 在 Visual Studio 3 查询中使用 CTE

我正在尝试从在 Visual Studio 的 tableadapter 中创建为 SQL 语句的子查询中获取结果。该项目链接到一个 oracle 数据库。我最初尝试使用“with”子句,它在 Oracle 中运行良好,但不如 Visual Studio 中的 SQL 查询。当我使用“with”子句时,错误说“无法解析查询”。如果没有“with”子句,前两个查询(查询 1 和查询 2)可以在 tableadapter 中正常工作,但是当我添加主查询时,我得到一个错误“SELECT”无法识别。仅供参考:我还尝试使用数据集将连接到但在 Visual Studio 端不起作用的存储过程,所以现在,我希望使用 SQL 语句而不是存储过程来完成此操作。任何帮助表示赞赏。

0 投票
2 回答
209 浏览

oracle - Does Perl DBI Support Oracle Subquery Factoring?

I have searched online for several days and cannot find an answer.

Does Perl DBI support Oracle Subquery Factoring (i.e. WITH-clause)?

As an example, the simple Perl DBI application further below fails with the error:

Simple Perl DBI Application:

This same application will work if I simply change the SQL to:

Finally, I confirmed that both SQLs mentioned above work when executed directly in a database visualizer application (e.g. DBVisualizer).

0 投票
1 回答
993 浏览

sql - Oracle 12c 子查询分解内联视图现在有不好的计划?

更新 11/2

12c在进行了一些额外的故障排除后,我的团队能够将这个 Oracle 错误直接与查询停止工作前一天晚上对数据库进行的参数更改联系起来。在遇到与该数据库相关的应用程序的一些性能问题后,我的团队让我们的 DBA 将OPTIMIZER_FEATURES_ENABLE参数从更改12.1.0211.2.0.4. 这解决了问题应用程序的性能问题,但导致了我上面描述的错误。为了验证,我已经能够通过更改此参数在单独的环境中复制同样的问题。我的 DBA 已向 Oracle 提交了一张票,以查看此问题。

作为一种解决方法,我可以对查询进行轻微更改以检索预期结果。具体来说,我结合Subquery1Subquery2把一些谓词Subquery1WHERE子句移到了JOIN(它们更合适的地方)。此更改编辑了我的执行计划(它的效率略低于之前列出的内容),但足以解决最初的问题。


原帖

首先,让我为这个问题的任何含糊之处道歉,但我正在处理一个机密的金融系统,所以我不得不隐藏某些实施细节。

背景

我有一个Oracle很久以前投入生产的查询,最近在升级11g12c. 据我(和我的生产支持团队)所知,此查询在此之前已经运行了一年多。

细节

查询过于复杂且效率不高,但这在很大程度上是因为我正在处理非规范化表(历史上以大型机建模)和来自上游系统的不良数据输入。为了处理复杂的业务情况,我利用了多个级别的子查询因子(WITH语句),然后我的最终语句将两个内联视图连接在一起。没有所有复杂谓词的查询的基本结构如下:

我有 3 张桌子Table1, Table2, Table3. Table1是一个处理表,由来自 的记录组成Table2

最后的查询非常基本:

问题

如果我编辑最终查询以删除第二个内联视图并评估A内联视图的输出,我会得到0 个返回的行。我已经手动评估了每个单独子查询的记录,并且可以确认这是预期结果。

同样,如果我编辑最终查询以仅生成“B”内联视图的输出,我会得到6 个返回的行。同样,我手动评估了数据,这完全符合预期。

现在,当将这两个子集(内联视图A和内联视图B)连接在一起时,我希望最终查询结果为 0 行(因为完整集和空集之间的内部连接不会产生匹配项)。但是,当我如上所述使用内部连接运行整个查询时,我得到了 1158 行

我已经查看了执行计划,但没有任何问题:

执行计划 1 执行计划 2

问题

显然,我做了一些事情来混淆 Oracle 优化器,并且更新的查询计划正在撤回与我提交的查询完全不同的查询。我最好的猜测是,所有这些临时视图都在同一个查询中浮动,我混淆了 Oracle 以评估它所依赖的某个集合之前的某些集合。

直到今天,我一直无法在WITH声明周围找到官方的 Oracle 文档,因此我对评估子查询的顺序从未完全有信心。我在搜索 SO(现在找不到)时确实注意到有人提到因子子查询不能引用另一个因子查询。我以前从不知道这是真的,但上面奇怪的输出让我想知道我之前是否只是幸运地使用了这个查询?

谁能解释我看到的行为?我是否试图用这个查询计划做一些明显不正确的事情?或者,是否有可能在 11g 和 12c 之间发生了一些变化,这可以解释为什么这个查询的行为可能已经改变了?

0 投票
1 回答
757 浏览

oracle - PL/SQL:在“WITH ... AS”子句之外使用“IF”语句

我正在尝试编写一个使用子查询因子分解“WITH .. AS”的过程,但是当我在它之前使用“IF .. THEN”时,出现语法错误,我不知道该怎么写,有什么帮助?

0 投票
1 回答
143 浏览

oracle - 在 where 子句中使用子查询分解结果

为什么我不能使用子查询因式分解子句导致 where 子句,如下面的 sql 所示:

rpt子查询在 select 语句的 where 子句中命名和使用。执行时遇到以下错误:ORA-00904: "RPT"."ID": invalid identifier

更新

事实上,对同一事物的嵌套查询也给了我同样的问题。嵌套子查询仅从单行返回单列值:

0 投票
2 回答
73 浏览

sql - 多次使用选择查询的结果到另一个中

我有一个使用 INTERSECT 执行的复杂选择查询(Query-1),它返回特定列的 ID。

查询 #1:

现在还有另一个更复杂的查询,它需要多次查询 #1 的结果。

查询 #2:

正如您所见,query-1 的结果在 query-2 中需要多次,我尝试在任何需要的地方替换 query-2 中的整个 query-1,这增加了查询的复杂性和可读性。

有没有办法以简单的方式做到这一点?