我想使用CROSS APPLY和表值函数,因为它是推荐的。
因此,对于一个实例,这非常好。
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
答案 0 :(得分:0)
您不能像在INNER中那样在CROSS APPLY中使用ON左|对... |申请但有一定的灵活性,您可以根据您的要求使用CROSS APPLY。使用CROSS APPLY尝试以下查询,您将获得所有不同的输出:
CREATE TABLE #test(id INT, ename VARCHAR(20))
CREATE TABLE #testOne(id INT, test_id INT, pname VARCHAR(20))
INSERT INTO #test VALUES
(1, 'Test'),
(2, 'Test1'),
(3, 'Test2')
INSERT INTO #testOne VALUES
(1, 1, 'Test3'),
(2, 1, 'Test4'),
(3, 2, 'Test5')
SELECT t.id, t.ename, p.pname
FROM #test t
CROSS APPLY(SELECT pname FROM #testOne) p
SELECT t.id, t.ename, p.pname
FROM #test t
CROSS APPLY(SELECT pname FROM #testOne p WHERE p.test_id = t.id) p
SELECT t.id, t.ename, p.pname
FROM #test t
CROSS APPLY(SELECT pname
FROM #testOne p
INNER JOIN #test tt ON tt.id = p.test_id
WHERE tt.id = 2) p
SELECT t.id, t.ename, p.pname
FROM #test t
CROSS APPLY(SELECT pname FROM #testOne) p
WHERE t.id = 2