当前位置: 首页 > 面试题库 >

实际示例,何时在SQL中使用OUTER / CROSS APPLY

樊熠彤
2023-03-14
问题内容

我一直在CROSS / OUTER APPLY和一位同事一起研究,我们正在努力寻找在何处使用它们的真实示例。

我已经花了很多时间研究什么时候应该在内部联接上使用交叉申请?和谷歌搜索,但主要的(唯一的)示例似乎很奇怪(使用一个表中的行数来确定要从另一个表中选择多少行)。

我认为这种情况可能会受益于OUTER APPLY:

联系人表(每个联系人包含1条记录)通信条目表(每个联系人可以包含n个电话,传真,电子邮件)

但是,使用子查询,通用表表达式OUTER JOIN以及RANK()和OUTER APPLY似乎都表现相同。我猜这意味着该方案不适用于APPLY。

请分享一些现实生活中的例子,并帮助解释该功能


问题答案:

一些用途APPLY是…

1) 每组查询的前N个(某些基数可能更有效)

SELECT pr.name,
       pa.name
FROM   sys.procedures pr
       OUTER APPLY (SELECT TOP 2 *
                    FROM   sys.parameters pa
                    WHERE  pa.object_id = pr.object_id
                    ORDER  BY pr.name) pa
ORDER  BY pr.name,
          pa.name 

2)为外部查询中的每一行调用一个表值函数

SELECT *
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle)

3) 重用列别名

SELECT number,
       doubled_number,
       doubled_number_plus_one
FROM master..spt_values
CROSS APPLY (SELECT 2 * CAST(number AS BIGINT)) CA1(doubled_number)  
CROSS APPLY (SELECT doubled_number + 1) CA2(doubled_number_plus_one)  

4) 取消不止一组列

假设1NF违反了表格结构。

CREATE TABLE T
  (
     Id   INT PRIMARY KEY,

     Foo1 INT, Foo2 INT, Foo3 INT,
     Bar1 INT, Bar2 INT, Bar3 INT
  ); 

使用2008+VALUES语法的示例。

SELECT Id,
       Foo,
       Bar
FROM   T
       CROSS APPLY (VALUES(Foo1, Bar1),
                          (Foo2, Bar2),
                          (Foo3, Bar3)) V(Foo, Bar); 

在2005年UNION ALL可以代替使用。

SELECT Id,
       Foo,
       Bar
FROM   T
       CROSS APPLY (SELECT Foo1, Bar1 
                    UNION ALL
                    SELECT Foo2, Bar2 
                    UNION ALL
                    SELECT Foo3, Bar3) V(Foo, Bar);


 类似资料:
  • 问题内容: 伙计们,有人可以举一个&的简单实用示例吗?javadocs中给出的示例非常繁琐。 我理解许可证的使用。 感谢您的任何回复。 问题答案: 如果您要谈论使用锁定机制(甚至同步屏障),请使用。明显的建议是向代表的用户a 。同步是一个AQS,它依次使用。 一切都在您的幕后完成。 编辑: 我们不讨论(AQS)的实际用途。 尽管并发构造的用法可能非常不同,但它们都可以具有相同的基础功能。 即在某些

  • 问题内容: 我听说将ADO.NET SQLParameter(参数化查询)用于SQL Server时仍然可以进行SQL注入。 我正在寻找C#/ VB代码中的真实示例作为证明。 编辑:我正在寻找特定的工作示例。没有介绍SQL注入或如何防止它。 问题答案: 如果要在存储的proc中创建语句并使用sp_executesql,则参数化查询是错误的安全网。

  • 问题内容: 我知道这将是一种不好的做法,尽管我知道我无法解释原因。 我认为您只应该对 不应该发生的 事情使用异常。我之所以问这个问题,是因为我有时会错误地使用异常。如果您的程序运行的 是标准情况, 是否应该引发异常? 问题答案: 您是对的:例外是指 特殊 情况。使用它们来控制正常的控制流不仅会掩盖代码的意图(这足以使它失去资格),而且速度也要慢得多,因为抛出和捕获异常的代价很高。 标准习惯用法(在

  • 本文向大家介绍Python装饰器使用示例及实际应用例子,包括了Python装饰器使用示例及实际应用例子的使用技巧和注意事项,需要的朋友参考一下 测试1 deco运行,但myfunc并没有运行 测试2 需要的deco中调用myfunc,这样才可以执行 测试3 @函数名 但是它执行了两次 测试4 这样装饰才行 测试5 @带参数,使用嵌套的方法 测试6 函数参数传递 测试7 未知参数个数 测试8 cla

  • 问题内容: 我们的一位培训人员在解释CountDownLatch和CyclicBarrier之间的区别时给出了一个示例。 :假设一块石头可以举起10个人,那么您将等待所有10个人来来。然后只有您才能抬起石头。 :如果您要去野餐,则需要首先在某个共同点上认识,从这里大家开始旅程。 如果有人同意这些意见,请给我一些细节。 我已经阅读了这两个类的sun API。但我需要更多解释。 问题答案: 关键区别在

  • 本文向大家介绍ruby元编程实际使用实例,包括了ruby元编程实际使用实例的使用技巧和注意事项,需要的朋友参考一下 很喜欢ruby元编程,puppet和chef用到了很多ruby的语言特性,来定义一个新的部署语言。 分享几个在实际项目中用到的场景,能力有限,如果有更优方案,请留言给我:) rpc接口模板化——使用eval、alias、defind_method 上面是一个rpc server,编写