问题标签 [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 投票
15 回答
839902 浏览

sql - 我什么时候应该使用 CROSS APPLY 而不是 INNER JOIN?

使用CROSS APPLY的主要目的是什么?

我已经阅读(模糊地,通过 Internet 上的帖子),cross apply如果您正在分区,则在选择大型数据集时可能会更有效。(想到分页)

我也知道CROSS APPLY不需要 UDF 作为右表。

在大多数INNER JOIN查询(一对多关系)中,我可以将它们重写为 use CROSS APPLY,但它们总是给我等效的执行计划。

谁能给我一个很好的例子,说明什么时候CROSS APPLY在那些INNER JOIN也能起作用的情况下有所作为?


编辑:

这是一个简单的示例,其中执行计划完全相同。(告诉我它们的不同之处以及cross apply更快/更高效的地方)

0 投票
2 回答
888 浏览

sql - 疯狂的 SQL 问题:如何使用枢轴进行某种交叉应用?

客户在他们的数据中有快捷方式,他们在字段中有大量记录。当我解析它们时,我需要制造记录,每个数量一个,将“标识符”增加 7 天(因为数字代表一个日期。

例如:一个销售四个星期的单一产品,我需要四个记录,每周一种产品。

 [Event Number]   [Classification]   [Weeks Running]    [Some Data]  
 2009 11 29 00           1                   1         runs one week 
 2009 12 06 00           2                   1         runs one week 
 2009 12 13 00           1                   4        runs four weeks
 2009 12 20 00           2                   4        runs four weeks

不知何故,我需要使用视图(sql select)将这些数据转换为以下内容(全部在同一个表中,包含空格以查看部分:

 [Event Number + Classification]      [Some Data]    
          2009 11 29 01            runs for one week 一周因此创造了一项记录。
          2009 12 06 02            runs for one week 

          2009 12 13 01           runs for four weeks重复 4 次将日期递增 7
          2009 12 20 01           runs for four weeks
          2009 12 27 01           runs for four weeks
          2009 01 03 01           runs for four weeks

          2009 12 20 02           runs for four weeks重复 4 次将日期递增 7
          2009 12 27 02           runs for four weeks
          2009 01 03 02           runs for four weeks
          2009 01 10 02           runs for four weeks

我的想法是有某种枢轴交叉应用sql代码?

0 投票
2 回答
5554 浏览

.net - LINQ to SQL 交叉应用

我想在 LINQ 中创建一个交叉应用到用户定义的表值函数的查询。SQL 将非常简单,如下所示:

这篇文章给出了一个 LINQ 查询的示例,该查询导致生成的 sql 包含交叉应用和外部应用,但仅适用于子查询,而不适用于 tvf。 本文确认 LINQ to SQL 将为“关系导航”生成交叉应用和外部应用运算符,但我不确定在这种情况下这意味着什么。 帖子几乎描述了我想做的事情,答案说这样做的唯一方法是将 SQL 查询包装在存储过程中,然后通过 LINQ 调用 sp。我希望这不是真的,因为我实际上需要一个可以在多个 LINQ 查询中的整个应用程序中以这种方式使用的 tvf,因此“将其包装在 sp 中”对我不起作用。有谁知道通过 LINQ 获得类似上述简单 SQL 语句的方法?

0 投票
1 回答
840 浏览

sql-server-2005 - 交叉应用 FREETEXTTABLE

MS SQL Server 2005:table1 有一个全文索引。我想在一个查询中针对它运行多个 freetexttable 搜索,但是我的两次尝试都失败了。任何帮助将不胜感激,谢谢!ps 如果能解决这个问题,我愿意升级到 sql 2008 :)

0 投票
2 回答
5404 浏览

sql-server - 如何重写 CROSS APPLY 到 INNER JOIN 以使视图被索引

在一个单独的线程上,我得到了一个关于如何将存储的过程转换为视图的工作示例,该视图将保存客户名称到订单的映射,其中订单是以逗号分隔的订单列表,包括 NULL 表示没有订单。所以对于下表,我需要以下内容出现在视图中:

我需要为视图编制索引,但如果视图中的 SELECT 查询具有 APPLY 和/或子查询,则不能这样做。是否可以将此视图转换为索引视图?

0 投票
1 回答
315 浏览

sql-server - 在 SQL Server 中访问 XML 列中数据的首选方式

背景

最近,我开始更多地使用 XML 作为 SQL Server 2005 中的列。在昨天的一段时间停机期间,我注意到我使用的两个链接表真的很碍事,不得不让我无聊到流泪为几个连接编写更多支持结构代码。

为了实际为这两个链接表生成数据,我将两个 XML 字段传递给我的存储过程,它写入主记录,将两个 XML 变量分解为 @tables 并将它们插入到实际表SCOPE_IDENTITY()中记录。

不过,经过一段时间后,我决定完全取消这些表,并将 XML 存储在 XML 字段中。现在我知道这里有一些缺陷,比如一般查询性能,GROUP BY不适用于 XML 数据。查询通常有点混乱,但总的来说,我喜欢XElement当我取回数据时现在可以使用它。

而且,这些东西不会改变。这是一次性事件,所以我不必担心修改。

我想知道实际获取这些数据的最佳方法。我的很多查询都涉及根据子记录甚至子记录的标准获取主记录。数据库中的大多数存储过程都这样做,但规模要复杂得多,通常需要 UDF 和子查询才能有效工作,但我举了一个简单的例子来测试查询一些数据......

现在我可以看到两种抓取方式。

方法一

真的吗?sql:variable 感觉有点不健康。但是,它确实有效。然而,以更有意义的方式访问数据显然更加困难。

方法二

这是更喜欢它。我已经可以很容易地扩展它来做连接和所有其他的好东西。我CROSS APPLY以前在表值函数上使用过,非常好。与之前的查询相比,此查询的执行计划非常先进。诚然,我没有在这些表上做任何索引和诸如此类的事情,但这是整个批处理成本的 97%。

方法 2(扩展)

不错IN的条款在这里。我也可以做类似的事情pt.PhoneType = 'Work'

最后

所以我基本上得到了我想要的结果,但是在使用这种机制来询问少量 XML 数据时我应该注意什么吗?它会在精心搜索期间降低性能吗?存储这样的标记样式数据是不是开销太大了?

边注

过去我使用过类似的东西sp_xml_preparedocumentOPENXML只是将列表传递给存储过程,但相比之下,这就像呼吸新鲜空气!

0 投票
1 回答
345 浏览

sql - SQL 复杂联合

这有点难以描述,但希望有一个解决方案。

我有一个 UDF,它接受一个 ID 并返回一个表。有没有办法可以SELECT为这些 ID 执行一个UNIONUDF 结果?例如;

获取 ID;

从 [TableOfIDs] 中选择 [ID]

从 ID 获取对象属性;

选择 * 从 GetObjectProperties(@ID)

但是我如何将两者结合起来呢?也就是说,要对来自 ID 的查询的 UDF 结果进行联合?

我希望这是有道理的!

0 投票
2 回答
39953 浏览

xml - 获取 XML 字段中的节点数 XQuery SQL Server 2008

我正在尝试获取 XML 字段中的节点数。但我总是看到 0 结果。这是我的查询的样子。

我的 XML 看起来像:

0 投票
1 回答
4474 浏览

sql-server-2008 - 在sql server中交叉应用

最近我的存储过程出现问题,它运行得太慢,所以我的一位同事建议交叉应用,他说交叉应用作为内部连接工作,但不需要表之间的命令键。

我的情况是我有三个表crossarticle_articlecrossarticle_articletocategory现在crossarticle_article 我想检索所有categoryid为 4 的记录,categoryid存储在crossarticle_articletocategory

据我了解,我为它创建了以下查询:

此查询应仅返回crossarticle_article类别 id 匹配 1 的记录,但它返回所有 3 个表中的所有记录。

我哪里出错了,如果这不是使用交叉应用的方式,那么如何使用,它的优势是什么。

交叉应用是否适用于相同的表......如果是这样,那么可能是什么情况......

0 投票
0 回答
251 浏览

sql - 如何优化查询

我使用 Linq2Sql 作为 ORM 并遇到以下问题:我有 2 个表,让我们称它们为客户端(id、名称)和 client_action(id、clientid、日期)。'client' 表包含客户端,client_action 包含用户操作的日志,我只需要其中的第一个。

有一个 linq2sql 查询(带有分页和排序),导致以下 sql:

该查询中有一个逻辑错误,我更改了它。现在生成的sql如下所示:

并且出现了性能问题。我使用“SET STATISTICS IO ON”执行了这两个查询并得到了有趣的结果:

  • 对于第一个查询:
    • 客户表被过滤
    • 申请了“前 10 名”
    • 'cross apply' 应用于结果 10 条记录
  • 对于第二个查询:
    • 客户表被过滤(找到大约 10K 条记录)
    • 'cross apply' 申请了那 10K 条记录
    • 申请了“前 10 名”

所以它使第二个查询工作得慢得多。有没有办法“调整”查询,以便尽可能在过滤后应用“交叉应用”?

问题是那里有 2 个“交叉应用”和更多的连接,这一切都使它工作得非常慢。我创建了可以提高查询速度的索引,但它仍然慢到令人讨厌。

帮帮帮帮_