问题标签 [cross-apply]

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 投票
3 回答
1424 浏览

tsql - 使用 CTE 代替光标

我有以下表结构。

我只想将 SubId 更新它为空的所有行,并且RawLineNumber以 1 递增并且SeqNumber以 1 递增。

我想用 A100 更新
RawLineNumber 2 和 3的SubId,用 A200 更新 RawLineNumber 11
SubId ,用 A300
更新RawLineNumber 26 和 27的SubId。

我有一个可以完成这项工作的光标,但我可以有一个 CTE 来处理它吗?

0 投票
1 回答
5269 浏览

sql - 如何使用 CROSS APPLY XML PATH

如何使用CROSS APPLYFOR XML规范包含信息列表的表格?

它应该像下面这样标准化

我认为可以用CROSS APPLY FOR XML. 还有其他方法吗?

0 投票
1 回答
25495 浏览

sql-server - 在更新语句中使用交叉应用

是否可以在 SQL Server 2005 的更新语句的 from 部分中使用交叉应用子句?

0 投票
3 回答
6274 浏览

sql-server - CROSS APPLY 问题 - 过滤多对一关系

我发现 MS SQL Server 如何处理CROSS APPLY.

我正在使用的数据库具有具有以下架构的定价系统:

服务 -> 价格模型 <- 价格组件('->' 表示指向表的外键

一些价格模型有“阶梯定价”,这意味着当一个数量参数达到各种阈值时,价格会上涨(1-3个单位是价格A,4-8个单位是价格B等)。

我遇到的问题是INNER JOIN[Price Model ID] 上的 [Service] 和 [Price Component] 之间产生重复的行,因为我实际上并没有使用 Price Component 中的价格,只是表中的另一个字段每个 [Price Component] 行都相同。

此问题的合乎逻辑的解决方法是将 替换为执行此操作的INNER JOINa CROSS APPLY

问题在于,在其他一些看似与此更改无关的连接中,效率完全被破坏了。查看执行计划,过去需要 2.3 个周期的连接现在需要 480 万个周期。

我尝试DISTINCT在原始查询中添加一个(因为它不使用 [Price Component] 表中的唯一数据,这是一个函数解决方案,除了它将运行时间翻了四倍。我还尝试只返回我需要的值来自 [Price Component] 表,但它似乎没有多大帮助:

奇怪的是,将 the 更改CROSS APPLY为 an 可以解决其他联接的问题,但却违背了 CROSS APPLY 的目的(据我了解,这基本上是 an和 anOUTER APPLY之间的区别)。 INNER JOINOUTER JOIN

有没有人对可能导致复杂性疯狂增加的原因有任何想法或见解CROSS APPLY

更新

因此,在阅读了有关如何解释执行计划的更多信息后,我学到了以下内容:

  • 原始查询(使用INNER JOINs)是一长串嵌套循环,从您提供的任何过滤数据开始。只要过滤器在索引字段上,响应时间就非常快。

  • 修改后的查询(使用CROSS APPLY)是一个较长的哈希匹配系列,它连接你给它的每个表,除了带有过滤器的表,然后最后应用过滤器。总是比死亡慢。

  • Working Modified 查询(带有OUTER APPLY)与原始查询执行相同的操作,但不排除与 WHERE 子句不匹配的结果。和原版一样活泼。

所以问题是:为什么要CROSS APPLY在请求的过滤器之前更改计划以连接所有表?

0 投票
1 回答
321 浏览

sql - 加入两张表的最佳方式*包括*一张表中的重复项

帐户(表格)

支付(表格)

我有账户表和支付表。支付表来自国外,因此我们无法控制它。这给我们留下了一个问题,我们无法根据记录 ID 字段连接两个表,这是我们无法解决的一个问题。因此,我们根据 Account#、SupplierID(第 2 列和第 3 列)加入。这会产生一个问题,它会创建(可能)多对多关系。但是我们过滤我们的记录,如果它们是活动的,我们在创建支付时在支付表上使用第二个过滤器。付款是按月创建的。在我看来有两个问题

  1. 查询需要相当长的时间才能完成(可能效率低下)
  2. 删除了某些不应删除的重复项。示例是支出表中的记录 6 和 8。这里发生的事情是,我们有一个客户,然后客户取消了,然后他又让他回来了。在这种情况下 +50、-50 和 +50。同样,所有值都是有效的,并且必须在报告中显示以供审计。目前只显示一个+50,另一个丢失。报告中偶尔会出现一些其他问题。

这是查询。它使用分组依据来删除重复项。我想要一个预先查询,它的表现优于并且确实考虑到只要它们出现在报告的月份中,PayOut 表中的任何记录都不会重复。

这是我们当前的查询

这个查询是最优的吗?我可以使用 CROSS APPLY 或 WHERE EXISTs 改进它,使其更快并消除重复问题吗?

请注意,此查询用于获取代表的付款。因此,每条记录都有 repid 字段分配给谁。理想情况下,我想使用 Select WHERE Exist 查询。

0 投票
4 回答
1666 浏览

mysql - MySQL - 按时间获取最后一个条目(如果为空,则为第一个)

我有以下 SQL Server 2008 查询:

这基本上获取了中每条记录的 LastET,但如果中的记录在T中的第一条记录之前E,则它获取中的第一条记录E

MySQL中的等价物是什么?

编辑


这是我的架构和数据:

SQLFiddle:

我想要的输出:

0 投票
1 回答
2977 浏览

sql - 从 T-SQL 读取 xsi:type

我想从 SELECT 语句中的“当前”节点读取 xsi:type 属性。我的 XML 如下所示:

我的选择语句如下所示:

我的问题是 LineItemType 行,因为它引发错误:不支持 XQuery 语法 '@{http://www.w3.org/2001/XMLSchema-instance}:type'

这很奇怪,因为如果我不使用 CROSS APPLY,我可以读取单一类型:

第二条语句适用于 SQL Server 2005。使用交叉应用时是否有可能读取 xsi:type 属性?

谢谢您的帮助

0 投票
2 回答
1269 浏览

sql - 使用 CTE 简化 SQL 语句

我有如下查询:

避免重复多次完全相同的表达式:(CASE WHEN ... THEN ... ELSE ... END)我想定义一个 CTE 并在 select、where 和 group by 表达式中使用查询此类表CalculatedValue

不幸的是,这不起作用,因为group by在创建时选择需要已经包含CTE

有没有其他方法可以让我不重复CASE WHEN...这么多次?

0 投票
2 回答
9666 浏览

sql - 何时选择 CROSS APPLY 以及何时存在?

我读到,CROSS APPLY就像 JOIN.. 我认为 JOIN 也可以通过 EXISTS 完成(相关子查询)

我很困惑,使用 CROSS APPLY 和 EXISTS 有什么区别?

我什么时候应该针对 EXISTS 进行 CROSS APPLY?

0 投票
4 回答
5430 浏览

c# - 交叉应用 - LINQ to Objects

在 T-SQL 中,您可以使用CROSS APPLY从语句中获取表左右之间所有可能的变化。现在我遇到了以下情况C#,我希望有一种方法可以使用 LINQ-to-Objects 来解决我的问题。

我有一个包含TestData对象的列表(如下所示),它类似于KeyValuePair<string, object>对象(只是一个Key和一个Value属性):键可以是所有内容,并且可以有多个具有相同键的对象。

我还有一个请求的密钥列表:

现在我想在requestedKeys列表中的键之间拥有 KeyValuePair 对象的所有可能组合。

是否可以使用 LINQ-to-Objects 解决我的问题。如果不是,你能告诉我最有效的构建方法吗?


编辑 1:
为了更清楚结果应该是什么:
我想要一个类似这样的 LINQ-to-Objects 查询:
@Joanna 感谢关于多个froms 的提示,但问题是:使用这种语法,你不能有一个动态的froms 的数量 就我而言,我需要与列表from中的项目一样多的 srequestedKeys