加入语句

时间:2016-10-19 14:36:16

标签: sql-server join

我有一个查询在另一个表上执行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。

帮助赞赏!!

谢谢

1 个答案:

答案 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);