2012-02-16 23 views
1

私は私が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'); 

私はこれをしようとを考えていますことができるか、この4回実行する必要があります。

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も – Jayy

+0

にそうABC DEF、ABC FGH、ABC IJK、...とを持つ行に影響します@彼は2つの列の間に1対1の対応関係があると言っているので、KaipaMSarmaはいいえ。 – Behrang

答えて

6

のようなテーブル内の1対1の対応があるわけ:

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。スマートな仕事。私はこれを探していた。あなたは写真で笑っていますか? – Jayy

+0

私はこのおかげで@ ulundo – munish

+0

thxみんなが好きです。はい、笑っています! – unludo

1

の場合と良いでしょう列間には1対1の対応がありますが、ソリューションは正しいですが(構文エラーがあります)、unludoのソリューションはさらに優れています。

そうしないと、このように複数のUPDATEステートメントを回避することによって、それがより簡潔にすることができます。

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

関連する問題