Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL UPDATE A列='XYZ'其中选择(要更新的多行比较不同的表)_Sql_Db2_Sql Update - Fatal编程技术网

SQL UPDATE A列='XYZ'其中选择(要更新的多行比较不同的表)

SQL UPDATE A列='XYZ'其中选择(要更新的多行比较不同的表),sql,db2,sql-update,Sql,Db2,Sql Update,下面SQL给出-811或作业被取消 UPDATE RATES A SET A.D_PROC_RATE_END = '1234' WHERE EXISTS ( SELECT A.C_PROCEDURE, A.

下面SQL给出-811或作业被取消

 UPDATE RATES A                 
 SET A.D_PROC_RATE_END  = '1234'          
  WHERE EXISTS                                  
  (                                            
 SELECT A.C_PROCEDURE,                          
        A.C_SPECIALTY,                          
        A.C_PROV_TYPE,                          
        A.C_PROCEDURE_MOD,                      
        A.N_PROC_RATE                           
   FROM PROC B                 
  LEFT OUTER JOIN  RATES A      

 ON                                             
    A.C_SPECIALTY     = '181'                
AND A.C_PROV_TYPE     = B.C_PROV_TYPE        
AND A.C_PROCEDURE     = B.C_PROCEDURE        
AND (A.C_PROCEDURE_MOD = B.C_PROCEDURE_MOD   
   OR A.C_PROCEDURE_MOD IS NULL)           
AND (A.D_PROC_RATE_END  IS NULL              
OR  A.D_PROC_RATE_END  = '12/31/9999')      
AND A.N_PROC_RATE     = B.N_PROC_RATE        
ORDER BY A.C_PROCEDURE) 

此sql不会更新包含以下条件的所有记录吗?

我们无法回答它是否会更新每一行。我们不知道数据。如果EXISTS谓词每次返回一个“true”值,那么它将更新每一行;否则就不会了

首先运行此查询:

 SELECT A.C_PROCEDURE,                          
        A.C_SPECIALTY,                          
        A.C_PROV_TYPE,                          
        A.C_PROCEDURE_MOD,                      
        A.N_PROC_RATE                           
   FROM RATES A                 
  WHERE EXISTS                                  
  (                                            
 SELECT A.C_PROCEDURE,                          
        A.C_SPECIALTY,                          
        A.C_PROV_TYPE,                          
        A.C_PROCEDURE_MOD,                      
        A.N_PROC_RATE                           
   FROM PROC B                 
  LEFT OUTER JOIN  RATES A      

 ON                                             
    A.C_SPECIALTY     = '181'                
AND A.C_PROV_TYPE     = B.C_PROV_TYPE        
AND A.C_PROCEDURE     = B.C_PROCEDURE        
AND (A.C_PROCEDURE_MOD = B.C_PROCEDURE_MOD   
   OR A.C_PROCEDURE_MOD IS NULL)           
AND (A.D_PROC_RATE_END  IS NULL              
OR  A.D_PROC_RATE_END  = '12/31/9999')      
AND A.N_PROC_RATE     = B.N_PROC_RATE        
ORDER BY A.C_PROCEDURE)
返回的每一行都将被更新。我几乎总是在做任何非琐碎的更新之前运行测试选择


您可以在将测试选择查询更改为wherenotesists后运行该查询,以查看哪些不会更新。

请不要使用所有大写字母!这被认为是对人大喊大叫,这是粗鲁和不受欢迎的-请修改你的帖子!请问是哪个DB2平台?您没有查找SQLCODE吗?它正在抱怨得到多行。。。这不应该是WHERE EXISTS的问题,因为它查找任何行,而不仅仅是一行。这真的是你的疑问吗?在内部和外部查询中也使用了相同的表别名——虽然这样做有效,但很难分辨哪些列在哪里。如果您试图比较来自内部和外部查询的列,它将忽略外部表引用。对不起,我对此表示歉意,在大型机中使用了大写,您知道文本中的DB2字符串是大写敏感的:Clockwork Muse谢谢。。实际上,这个查询更新了表中的每一行。现在真是一团糟。