Questions tagged «cross-apply»

2
外部应用与左连接性能
我正在使用SQL SERVER 2008 R2 我刚刚在SQL中遇到了APPLY,并且很喜欢它如何解决很多情况下的查询问题, 我使用2个左联接的许多表都得到结果,我能够获得1个外部应用。 我的本地数据库表中有少量数据,并且在部署之后,该代码应该在至少20倍大的数据上运行。 我担心对于大量数据而言,外部应用可能需要比2个左连接条件更长的时间, 任何人都可以说出Apply的工作原理,以及它如何影响非常大的数据的性能。如果可能的话,每个表的大小与n1 ^ 1或n1 ^ 2 ...成比例关系……其中n1是表中的行数1。 这是带有2个左联接的查询 select EC.*,DPD.* from Table1 eC left join ( select member_id,parent_gid,child_gid,LOB,group_gid,MAX(table2_sid) mdsid from Table2 group by member_id,parent_gid,child_gid,LOB,group_gid ) DPD2 on DPD2.parent_gid = Ec.parent_gid AND DPD2.child_gid = EC.child_gid AND DPD2.member_id = EC.member_id AND DPD2.LOB = EC.default_lob AND …

2
交叉应用产生外部连接
为了回答SQL对分区的计数问题,Erik Darling发布了此代码来解决以下问题COUNT(DISTINCT) OVER (): SELECT * FROM #MyTable AS mt CROSS APPLY ( SELECT COUNT(DISTINCT mt2.Col_B) AS dc FROM #MyTable AS mt2 WHERE mt2.Col_A = mt.Col_A -- GROUP BY mt2.Col_A ) AS ca; 查询使用CROSS APPLY(not OUTER APPLY),为什么执行计划中有外部联接而不是内部联接? 同样,为什么取消注释group by子句会导致内部联接? 我认为数据并不重要,但可以复制kevinwhat在另一个问题上给出的数据: create table #MyTable ( Col_A varchar(5), Col_B int ) insert …

2
生成差异的最有效方法
我在SQL Server中有一张表,看起来像这样: Id |Version |Name |date |fieldA |fieldB ..|fieldZ 1 |1 |Foo |20120101|23 | ..|25334123 2 |2 |Foo |20120101|23 |NULL ..|NULL 3 |2 |Bar |20120303|24 |123......|NULL 4 |2 |Bee |20120303|34 |-34......|NULL 我正在研究要比较的存储过程,该过程需要输入数据和版本号。输入数据具有“名称”更新字段Z中的列。预期大多数字段列为NULL,即,每行通常仅具有前几个字段的数据,其余的均为NULL。名称,日期和版本对表构成唯一约束。 对于给定的版本,我需要针对该表比较输入的数据。每行都需要进行区分-通过名称,日期和版本来标识一行,并且字段列中任何值的任何更改都需要在差异中显示。 更新:所有字段都不必为十进制类型。其中一些可能是nvarchars。我希望diff在不转换类型的情况下发生,尽管diff输出可以将所有内容转换为nvarchar,因为它仅用于显示目的。 假设输入为以下,并且请求的版本为2: Name |date |fieldA |fieldB|..|fieldZ Foo |20120101|25 |NULL |.. |NULL Foo |20120102|26 |27 |.. |NULL Bar …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.