Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 交叉应用vs";逗号连接;_Sql Server_Sql Server 2012_Cross Apply - Fatal编程技术网

Sql server 交叉应用vs";逗号连接;

Sql server 交叉应用vs";逗号连接;,sql-server,sql-server-2012,cross-apply,Sql Server,Sql Server 2012,Cross Apply,我有一个同事喜欢使用她所说的“逗号连接”。我最近在一个现场环境中首次使用cross申请,并注意到它给出的结果与她“逗号连接”的结果相同,并且想知道这两个有什么不同,或者她的方式是否只是短手。下面我有两个临时表的代码,然后它做了一个交叉应用,将第一个临时表中的所有内容附加到第二个临时表中的所有内容。它还通过她的“逗号连接”实现了这一点 那么,这些都是相同的,只是写它的方式不同,还是在某些情况下它做了一些不同的事情?哦,我们使用SQL 2012。正如SqlZim所指出的,这些“逗号联接”是一种称为隐

我有一个同事喜欢使用她所说的“逗号连接”。我最近在一个现场环境中首次使用cross申请,并注意到它给出的结果与她“逗号连接”的结果相同,并且想知道这两个有什么不同,或者她的方式是否只是短手。下面我有两个临时表的代码,然后它做了一个交叉应用,将第一个临时表中的所有内容附加到第二个临时表中的所有内容。它还通过她的“逗号连接”实现了这一点

那么,这些都是相同的,只是写它的方式不同,还是在某些情况下它做了一些不同的事情?哦,我们使用SQL 2012。

正如SqlZim所指出的,这些“逗号联接”是一种称为隐式联接的老式联接表方式。
此类联接的联接条件在where子句中-例如-

SELECT *
FROM a, b
WHERE a.Id = b.aId

SELECT *
FROM a
INNER JOIN b ON a.Id = b.aId
出于显而易见的原因,我希望隐式(或旧式)连接是不受欢迎的——正如您可能很容易想象的那样,当您需要连接两个以上的表时,与显式连接相比,它变得非常不可读

但是,它根本不是联接。
Cross-apply
的意思是对左侧的每一行执行
Cross-apply
操作符右侧的任何内容

您发布的隐式连接语句的更精确的显式连接是

SELECT *
FROM #name
CROSS JOIN #letter
另一种选择是使用内部联接和联接条件,该联接条件的计算结果总是
true
-如下所示:

SELECT *
FROM #name
INNER JOIN #letter ON 1=1
正如SqlZim所指出的,这些“逗号连接”是一种连接表的老式方式,称为隐式连接。
此类联接的联接条件在where子句中-例如-

SELECT *
FROM a, b
WHERE a.Id = b.aId

SELECT *
FROM a
INNER JOIN b ON a.Id = b.aId
出于显而易见的原因,我希望隐式(或旧式)连接是不受欢迎的——正如您可能很容易想象的那样,当您需要连接两个以上的表时,与显式连接相比,它变得非常不可读

但是,它根本不是联接。
Cross-apply
的意思是对左侧的每一行执行
Cross-apply
操作符右侧的任何内容

您发布的隐式连接语句的更精确的显式连接是

SELECT *
FROM #name
CROSS JOIN #letter
另一种选择是使用内部联接和联接条件,该联接条件的计算结果总是
true
-如下所示:

SELECT *
FROM #name
INNER JOIN #letter ON 1=1

“逗号连接”是旧式连接。谢谢你的解释逗号连接。。。讨厌。这里有一个引用Oracle的链接,但同样的东西。。。别用那种语法。逗号连接只是一种不好的做法,它会让人难以阅读。它们仍然有一些方便的用例,但在大多数情况下,它们很难看,很烦人,必须通过过滤器(又称WHERE子句)来查找所有连接。“逗号连接”是旧式连接。谢谢你的解释逗号连接。。。讨厌。这里有一个引用Oracle的链接,但同样的东西。。。别用那种语法。逗号连接只是一种不好的做法,它会让人难以阅读。它们仍然有一些方便的用例,但在大多数情况下,它们很难看,很烦人,必须通过过滤器(又称WHERE子句)来查找所有连接。