0
我想按照推荐使用CROSS APPLY和表值函数。为什么我不能在CROSS APPLY上应用“ON”
所以,对于这个例子,这工作得很好。
SELECT
TBL1.pkId,
TBL1.roleIS,
TBL1.Name INTO #tmpTBL
FROM TBL1
CROSS APPLY Convert(@keys, ',') AS ArrayTBL
WHERE ArrayTBL.item = TBL1.pkId
但是,只要我尝试应用“ON”关键字,它就开始显示语法错误。为什么它是如此 它也是一种内部连接?
SELECT
TBL1.pkId,
TBL1.roleIS,
TBL1.Name INTO #tmpTBL
FROM TBL1
CROSS APPLY Convert(@keys, ',') AS ArrayTBL
ON ArrayTBL.item = TBL1.pkId
我想申请“ON”只是因为我有以下查询我需要使用CROSS APPLY。
Select Tbl1.pkey, Tbl1.Name, Tbl2.EmployeeName
from Tbl1 inner join Tbl2 on Tbl1.id= Tbl2.Id
inner join Convert(@keys, ',') AS Array
ON Tbl2.ItemId = Array.item
inner join Tbl3 on tbl3.id = Array.item
inner join #tmpTBL on #tmpTBL.pkId = Tbl3.id
“CROSS”中没有'ON'。 'ON'只对'INNER'或'OUTER'有效。 – Ben
我还是不明白你为什么要'ON'子句?使用'WHERE'子句,它们在逻辑上是相同的。一般来说''CROSS'连接没有'ON',它不应该,它会进行笛卡尔连接。 – sagi
因为'cross apply'是一个“交叉连接” - 而一个交叉连接没有连接列。使用标准关键字可以更清楚地说明:“交叉应用”与标准SQL中的“交叉连接横向”相同。 –