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中的「交叉連接橫向」相同。 –