Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
从oracle的两个表更新_Oracle_Join_Sql Update - Fatal编程技术网

从oracle的两个表更新

从oracle的两个表更新,oracle,join,sql-update,Oracle,Join,Sql Update,我有两张桌子 J_YAD_PICT(表名),图库显示图(列) J_YAD_CGR_PICT(表名),Y_CGR_FLG(列) 当Y_CGR_FLG在J_YAD_CGR_PICT中不为空时,则GALLERY_DISP_FLG需要设置为1 我已经执行了这个 Update A SET A.GALLERY_DISP_FLG = (CASE WHEN b.Y_CGR_FLG IS NOT NULL) THEN '1' ELSE A.GALLERY_DISP_FLG END

我有两张桌子

  • J_YAD_PICT(表名),图库显示图(列)
  • J_YAD_CGR_PICT(表名),Y_CGR_FLG(列)
  • 当Y_CGR_FLG在J_YAD_CGR_PICT中不为空时,则GALLERY_DISP_FLG需要设置为1

    我已经执行了这个

    Update A
    SET A.GALLERY_DISP_FLG = 
      (CASE WHEN b.Y_CGR_FLG IS NOT NULL) THEN '1' 
            ELSE A.GALLERY_DISP_FLG 
       END
    FROM J_YAD_PICT A inner join J_YAD_CGR_PICT B 
    on A.YP_ID = B.YP_ID;
    
    但鉴于这一错误:

    SQL错误:ORA-00905:缺少关键字


    有人能帮我吗?

    您使用别名A的是哪张表

    我建议这样试试

    Update J_YAD_PICT A SET 
      A.GALLERY_DISP_FLG =   (CASE WHEN b.Y_CGR_FLG IS NOT NULL) THEN '1'  
                                   ELSE A.GALLERY_DISP_FLG 
                             END 
    FROM J_YAD_PICT A inner join J_YAD_CGR_PICT B  on A.YP_ID = B.YP_ID;
    
    像这样的

    update j_yad_pict p set
      p.gallery_disp_flg = (select case when c.y_cgr_flg is not null then '1'
                                        else p.gallery_disp_flg
                                   end
                            from j_yad_cgr_pict c
                            where c.yp_id = p.yp_id
                           )
    where exists (select null from j_yad_cgr_pict c1
                  where c1.yp_id = p.yp_id
                 );  
    

    存在
    查询的一部分在这里,这样您就不会更新
    J_YAD_CGR_PICT
    表中不匹配的行(到
    NULL
    )。

    当更新表J_YAD_PICT时,必须在内部选择中从表连接此表

    UPDATE J_YAD_PICT A
    SET A.GALLERY_DISP_FLG = (
        SELECT CASE WHEN b.Y_CGR_FLG IS NOT NULL THEN '1' ELSE A.GALLERY_DISP_FLG END 
        FROM J_YAD_PICT A2 
            INNER JOIN J_YAD_CGR_PICT B ON A.YP_ID = B.YP_ID 
            WHERE A.ID = A2.ID);
    

    请添加一些解释。中的
    在SQL更新语句中无效(在标准SQL和Oracle中)