2016-10-19 8 views
0

他のテーブルでINNER JOINを実行するクエリがあります。私は変数がある場合、同じクエリがLEFT JOINを代わりに実行しなければならない状況があります。結合前のSQLクエリのIF/CASE条件

それで、IfとElseで同じクエリtwiseを書くこととは別に、これを達成するためのよりよい方法がありますか?

例:私は変数@PoNumが設定されている場合は

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

だから、私はINNER JOINをLEFT JOINをして置き換える必要があります。

ヘルプありがとうございました!

はあなたが

+0

あなたは 'mysql'と' sql-server'の違いが分かりますか?これらのタグを質問に追加したのはなぜですか?あなたは両方を使いますか? – Marusyk

+0

正しくタグ付けしてください。構文は 'mysql'と' sql-server'で異なります。また、あなたを助けても間違ったシステムでは役に立たない。 – Eric

答えて

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); 
+0

ありがとう、これは非常に役に立ち、私の場合に役立った。 – Shrav