我有一个查询在另一个表上执行INNER JOIN。我有一种情况,如果我有一个变量集,那么相同的查询应该做一个LEFT JOIN而不是。
除了在If和Else中编写相同的查询twise之外,有没有更好的方法来实现这个目标?
例如:
MERGE XXX
USING (SELECT a,b,c
FROM #temp1 p
INNER JOIN #temp2 s on p.SlmID = s.SlmID
) AS source
ON (1=0)
WHEN NOT MATCHED THEN
INSERT (x,y,z
)
VALUES (p,q,r
)
OUTPUT source.a, INSERTED.x
INTO #temp1 (a, x);
所以如果我设置了变量@PoNum,我应该用LEFT JOIN替换INNER JOIN。
帮助赞赏!!
谢谢
答案 0 :(得分:0)
试试这个,我使用了完整的外连接,并通过where条件控制它。
MERGE XXX
USING (SELECT a,b,c
FROM #temp1 p
Full OUTER JOIN #temp2 s on p.SlmID = s.SlmID
Where (@PoNum=0 AND p.SlmID is not null and s.SlmID is not null)
OR (@PoNum=1 AND p.SlmID is not null) --Variable Set, Left Join
) AS source
ON (1=0)
WHEN NOT MATCHED THEN
INSERT (x,y,z
)
VALUES (p,q,r
)
OUTPUT source.a, INSERTED.x
INTO #temp1 (a, x);