问题标签 [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.
tsql - 使用 CTE 代替光标
我有以下表结构。
我只想将 SubId 更新为它为空的所有行,并且RawLineNumber以 1 递增并且SeqNumber以 1 递增。
我想用 A100 更新
RawLineNumber 2 和 3的SubId,用 A200 更新 RawLineNumber 11
的SubId ,用 A300
更新RawLineNumber 26 和 27的SubId。
我有一个可以完成这项工作的光标,但我可以有一个 CTE 来处理它吗?
sql - 如何使用 CROSS APPLY XML PATH
如何使用CROSS APPLY
和FOR XML
规范包含信息列表的表格?
它应该像下面这样标准化
我认为可以用CROSS APPLY FOR XML
. 还有其他方法吗?
sql-server - 在更新语句中使用交叉应用
是否可以在 SQL Server 2005 的更新语句的 from 部分中使用交叉应用子句?
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 JOIN
a CROSS APPLY
:
问题在于,在其他一些看似与此更改无关的连接中,效率完全被破坏了。查看执行计划,过去需要 2.3 个周期的连接现在需要 480 万个周期。
我尝试DISTINCT
在原始查询中添加一个(因为它不使用 [Price Component] 表中的唯一数据,这是一个函数解决方案,除了它将运行时间翻了四倍。我还尝试只返回我需要的值来自 [Price Component] 表,但它似乎没有多大帮助:
奇怪的是,将 the 更改CROSS APPLY
为 an 可以解决其他联接的问题,但却违背了 CROSS APPLY 的目的(据我了解,这基本上是 an和 anOUTER APPLY
之间的区别)。 INNER JOIN
OUTER JOIN
有没有人对可能导致复杂性疯狂增加的原因有任何想法或见解CROSS APPLY
?
更新
因此,在阅读了有关如何解释执行计划的更多信息后,我学到了以下内容:
原始查询(使用
INNER JOIN
s)是一长串嵌套循环,从您提供的任何过滤数据开始。只要过滤器在索引字段上,响应时间就非常快。修改后的查询(使用
CROSS APPLY
)是一个较长的哈希匹配系列,它连接你给它的每个表,除了带有过滤器的表,然后最后应用过滤器。总是比死亡慢。Working Modified 查询(带有
OUTER APPLY
)与原始查询执行相同的操作,但不排除与 WHERE 子句不匹配的结果。和原版一样活泼。
所以问题是:为什么要CROSS APPLY
在请求的过滤器之前更改计划以连接所有表?
sql - 加入两张表的最佳方式*包括*一张表中的重复项
帐户(表格)
支付(表格)
我有账户表和支付表。支付表来自国外,因此我们无法控制它。这给我们留下了一个问题,我们无法根据记录 ID 字段连接两个表,这是我们无法解决的一个问题。因此,我们根据 Account#、SupplierID(第 2 列和第 3 列)加入。这会产生一个问题,它会创建(可能)多对多关系。但是我们过滤我们的记录,如果它们是活动的,我们在创建支付时在支付表上使用第二个过滤器。付款是按月创建的。在我看来有两个问题
- 查询需要相当长的时间才能完成(可能效率低下)
- 删除了某些不应删除的重复项。示例是支出表中的记录 6 和 8。这里发生的事情是,我们有一个客户,然后客户取消了,然后他又让他回来了。在这种情况下 +50、-50 和 +50。同样,所有值都是有效的,并且必须在报告中显示以供审计。目前只显示一个+50,另一个丢失。报告中偶尔会出现一些其他问题。
这是查询。它使用分组依据来删除重复项。我想要一个预先查询,它的表现优于并且确实考虑到只要它们出现在报告的月份中,PayOut 表中的任何记录都不会重复。
这是我们当前的查询
这个查询是最优的吗?我可以使用 CROSS APPLY 或 WHERE EXISTs 改进它,使其更快并消除重复问题吗?
请注意,此查询用于获取代表的付款。因此,每条记录都有 repid 字段分配给谁。理想情况下,我想使用 Select WHERE Exist 查询。
mysql - MySQL - 按时间获取最后一个条目(如果为空,则为第一个)
我有以下 SQL Server 2008 查询:
这基本上获取了中每条记录的 LastE
值T
,但如果中的记录在T
中的第一条记录之前E
,则它获取中的第一条记录E
。
MySQL中的等价物是什么?
编辑
这是我的架构和数据:
SQLFiddle:
我想要的输出:
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 属性?
谢谢您的帮助
sql - 使用 CTE 简化 SQL 语句
我有如下查询:
避免重复多次完全相同的表达式:(CASE WHEN ... THEN ... ELSE ... END)
我想定义一个 CTE 并在 select、where 和 group by 表达式中使用查询此类表CalculatedValue
不幸的是,这不起作用,因为group by
在创建时选择需要已经包含CTE
有没有其他方法可以让我不重复CASE WHEN...
这么多次?
sql - 何时选择 CROSS APPLY 以及何时存在?
我读到,CROSS APPLY就像 JOIN.. 我认为 JOIN 也可以通过 EXISTS 完成(相关子查询)
我很困惑,使用 CROSS APPLY 和 EXISTS 有什么区别?
我什么时候应该针对 EXISTS 进行 CROSS APPLY?
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 感谢关于多个from
s 的提示,但问题是:使用这种语法,你不能有一个动态的from
s 的数量 就我而言,我需要与列表from
中的项目一样多的 srequestedKeys