如何缩短此SQL?

如何缩短此SQL?,sql,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

我需要运行四次,如何在一行或更少的行中运行

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
如果我理解得很好:

最好加上括号-

如果我理解清楚:


最好加上括号-

如果列之间有一对一的对应关系,那么您的解决方案是正确的,但有语法错误,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'));
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');
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')
   );
最后,您甚至不需要使用in运算符,因此可以编写如下内容:

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

如果列之间有一对一的对应关系,那么您的解决方案是正确的,但有语法错误,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'));
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');
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')
   );
最后,您甚至不需要使用in运算符,因此可以编写如下内容:

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

如果您的oppar_job_name和oppar_job_rec谓词总是相同的,我更喜欢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'));
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');
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')
   );

如果您的oppar_job_name和oppar_job_rec谓词总是相同的,我更喜欢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'));
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');
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')
   );

缩短的SQL也会影响包含ABC DEF、ABC FGH、ABC IJK等的行,。。诸如此类on@KaipaMSarma不,因为他说这两列之间有1对1的对应关系。缩短的SQL也会影响包含ABC DEF、ABC FGH、ABC IJK等的行,。。诸如此类on@KaipaMSarma不,因为他说这两列之间有一对一的对应关系。聪明的工作。我在找这个。顺便说一句,你在图中微笑:+1。聪明的工作。我在找这个。顺便说一句,你在照片中微笑吗: