oracle关联多张表用一张表的一个字段更新另一张表的一个字段


UPDATE Files x 
SET ( x.Filename ) = nvl(
    (
        SELECT DISTINCT
            T7.lastfile 
            FROM--         Files T1,-- 附件文件名表
            Version T2,-- 版本表
            Version_File_Map T3,-- 版本文件名映射表
            Attachment T4,-- 附件表
            Item T5,-- 物料表
            Attachment_Map T6,-- 附件跟物料, 附件跟版本映射
            FILENAME_P T7 -- 物料,原名,新名,版本号
            
        WHERE
            x.Id = T3.File_Id 
            AND T2.Id = T3.Version_Id 
            AND T2.Attach_Id = T4.Id 
            AND T4.Id = T6.Attach_Id --         AND T2.Attach_Id = T6.Attach_Id
            
            AND T5.Id = T6.Parent_Id 
            AND T2.Attach_Id = T6.Attach_Id 
            AND x.File_Type = 'PDF' 
            AND T7.id = T5.Item_Number --             AND T5.ITEM_NUMBER = '110103000967'
            
            AND T7.firstfile = x.Filename --             AND T1.FILENAME = '110103000967_初始.PDF'
            
            AND T2.VERSION_NUM = T7.version --             AND T7.version = '1'
--         AND T1.id = x.id --         ) T WHERE lastfile = T.lastfile
            
        ),
        x.filename 
    )

运行结果是
ORA-01427: 单行子查询返回多个行

查询出来的是结果集,但是这就是我需要的啊,一张表的字段批量更新另一张表的一个字段,各位大神们,怎么搞啊

ORA-01427: 单行子查询返回多个行 说明你子查询中返回超过1行,你需要加rownum= 1控制一下,或者加更多条件确保只返回一行

你是在代码里调用sql还是就是在客户端想执行以下批量修改?批量修改我还真不会,代码里的话mybatis的foreach标签了解一下