使用Join更新Oracle查询问题

时间:2018-07-25 07:01:20

标签: oracle

我不明白为什么它的Sql命令没有正确结束,

              Update Table1
                 Set LS.SECU_CHECKER_CODE  = '1000',
                     LS.SECU_CHECKER_DATE  = To_Char(SysDate, 'YYYYMMDDHH24MISS'),
                     LS.SECU_RECORD_STATUS = 98 
                From Table1 LS
                Join Table2 LS2
                  On LS2.SECC_SECURITY_ID = LS.SECU_SECURITY_ID
               Where LS2.SECC_LIMIT_ID    = '00010101010101';

3 个答案:

答案 0 :(得分:1)

在Oracle中,从视图更新的语法与您使用的语法不同。但是,就您而言,您甚至不应该从视图中进行更新,因为您不是在使用其他表的内容,而只是检查记录的存在,而您应该使用EXISTSIN

update table1
set secu_checker_code  = '1000'
  , secu_checker_date  = to_char(sysdate, 'yyyymmddhh24miss')
  , secu_record_status = 98 
where secu_security_id in
(
  select secc_security_id
  from table2
  where secc_limit_id = '00010101010101'
);

答案 1 :(得分:1)

您似乎正在尝试更新表1的选择。您需要一个where子句。 可能是这样的:

update table1 t1
   set ls.secu_checker_code  = '1000'
      ,ls.secu_checker_date  = to_char(sysdate, 'YYYYMMDDHH24MISS')
      ,ls.secu_record_status = 98
 where t1.secu_security_id in (select t2.secc_security_id
                                 from table2 t2
                                where t2.secc_limit_id = '00010101010101');

答案 2 :(得分:1)

这也很好

UPDATE table1 
   SET (SECU_CHECKER_CODE, 
        SECU_CHECKER_DATE, 
        SECU_RECORD_STATUS) = (
                                Select '1000',
                                       To_Date(SysDate), 
                                       98
                                   From table1
                                   Join table2 
                                     On SECC_SECURITY_ID = SECU_SECURITY_ID
                                  Where SECC_LIMIT_ID    = '00010101010101')