2012-02-16 3 views
1

나는 한 줄에 내가 그것을 할 수있는 방법이 네 번 실행해야 이하 라인이 SQL은 어떻게 단축 할 수 있습니까?

update opp set run_mode = 0, run_time = 0, 
where oppar_job_name in ('ABC')) and oppar_job_rec in ('ABC'); 

update opp set run_mode = 0, run_time = 0, 
where oppar_job_name in ('DEF')) and oppar_job_rec in ('DEF'); 

update opp set run_mode = 0, run_time = 0, 
where oppar_job_name in ('FGH')) and oppar_job_rec in ('FGH'); 

update opp set run_mode = 0, run_time = 0, 
where oppar_job_name in ('IJK')) and oppar_job_rec in ('IJK'); 

나는이 노력하고 생각하고있을 수 있습니다.

update opp set run_mode = 0, run_time = 0, 
where oppar_job_name in (
'ABC', 
'DEF', 
'FGH', 
'IJK' 
) and oppar_job_rec in 
(
'ABC', 
'DEF', 
'FGH', 
'IJK' 
); 

바로 위에있는 것이 맞습니까? 내가 잘 이해한다면

ABC ABC 
DEF DEF 
FGH FGH 
IJK IJK 
+0

귀하의 단축 SQL은 또한 ABC DEF, ABC FGH, ABC IJK을 갖는 행에 영향을 미칠 것입니다 .. 그래서 – Jayy

+0

을에를 @ KaipaMaxarma는 두 열 사이에 일대일 대응이 있다고 말하기 때문에 불가능합니다. – Behrang

답변

6

같은 테이블에 하나의 대응에 하나가 의미 :

update opp set run_mode = 0, run_time = 0, 
where (oppar_job_name = oppar_job_rec) and 
     (oppar_job_rec in ('ABC','DEF','FGH','IJK')); 

그것은 여분의 괄호 ;-)

+0

+1. 똑똑한 일. 나는 이것을 찾고 있었다. Btw 당신은 사진에서 웃고 있습니다 :) – Jayy

+0

나는이 덕분에 @ ulundo – munish

+0

남자들이 좋아해. 네, 웃어요! – unludo

1

하는 경우에 더 낫다 열 사이에는 일대일 대응이 있습니다. 그러면 솔루션은 정확하지만 구문 오류가 있으며 unludo의 솔루션이 더 좋습니다.

그렇지 않으면 당신은 다음과 같이 여러 업데이트 문을 피함으로써 프로그램을 더욱 간결하게 만들 수 : 마지막으로

update opp set 
    run_mode = 0, run_time = 0 
where 
    (oppar_job_name in ('ABC') and oppar_job_rec in ('ABC')) OR 
    (oppar_job_name in ('DEF') and oppar_job_rec in ('DEF')) OR 
    (oppar_job_name in ('FGH') and oppar_job_rec in ('FGH')) OR 
    (oppar_job_name in ('IJK') and oppar_job_rec in ('IJK')); 

이 같은 것을 쓸 수 있도록, 심지어는 in 연산자를 사용할 필요가 없습니다 :

update opp set 
    run_mode = 0, run_time = 0 
where 
    (oppar_job_name = 'ABC' and oppar_job_rec = 'ABC') OR 
    (oppar_job_name = 'DEF' and oppar_job_rec = 'DEF') OR 
    (oppar_job_name = 'FGH' and oppar_job_rec = 'FGH') OR 
    (oppar_job_name = 'IJK' and oppar_job_rec = 'IJK'); 
1

oppar_job_name 및 oppar_job_rec 술어가 항상 동일하면 나는 언 루프의 대답을 선호합니다. 매개 변수가 다를 수 있습니다 경우

그렇지 않으면, 당신은 다음과 같이 수행 할 수 있습니다

update opp set run_mode = 0, run_time = 0 
where (oppar_job_name, oppar_job_rec) 
in (('ABCname' , 'ABCrec') 
    , ('DEFname' , 'DEFrec') 
    , ('FGHname' , 'FGHrec') 
    , ('IJKname' , 'IJKrec') 
    ); 
+0

differnt parameters.thanks의 경우에 유용합니다. – munish

관련 문제