2016-10-19 4 views
0

다른 테이블에서 INNER JOIN을 수행하는 쿼리가 있습니다. 나는 변수가있는 경우 동일한 쿼리가 LEFT JOIN을 대신 수행해야하는 상황이 있습니다.가입 전 SQL 쿼리에 대한 IF/CASE 조건

그래서 If와 Else에서 동일한 쿼리 twise를 작성하는 것 외에는 더 좋은 방법이 있습니까?

예 : I 변수 @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가 왼쪽으로 가입 교체해야 가입하세요.

도움말 감사드립니다!

당신이

+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