有这样一个SQL,求教:
A表:ID,FILE_PATH,FILE_VERSION_ID
B表:ID,FILE_PATH
需要更新:
A表的FILE_VERSION_ID = B表的ID,
条件:A表的FILE_PATH = B表的FILE_PATH
就是SET XX = (多个结果集)
WHERE FILE_PATH = (多个结果集)
需要怎么对应起来呢。select t2.file_version_id from file_version t2 inner join file_file t3 
on t3.file_path=t2.file_final_path
这是查询出的file_version_idselect t4.file_final_path from file_version
这是查询出的file_pathupdate file_file t1 set t1.file_version_id = 
(查询出的file_version_id) 
where t5.file_path = (查询出的file_path) 有可能查询出的file_version_id的数量比查询出的file_final_path的数量多。
因为file_file表中的file_path可以重复,而file_version表中只存最新的版本。

解决方案 »

  1.   

    补充:
    为什么A表会比B表多呢。
    以为添加一个文件的时候,需要忘A表中插入一条新的记录,版本号为当前版本号+1。
    而如果当前没有版本号,也就是新版本号为1,那么就往B表中插入一条新数据。
    如果当前有版本号,也就是新版本号大于1,那么就更新B表中现有的记录。
      

  2.   

    说的再简单点:
    A表:ID,FILE_PATH,FILE_VERSION_ID
    B表:ID,FILE_PATH需要更新A表的FILE_VERSION_ID字段为B表的ID字段,条件是A表的FILE_PATH等于B表的FILE_PATH
      

  3.   

    既然是返回的多个结果 那如何来确定一个id对应返回一堆id中的哪个呢?
      

  4.   

    有个兄弟给的SQL执行正确。
    update A set FILE_VERSION_ID = ( SELECT B.ID FROM B WHERE A.FILE_PATH = B.FILE_PATH AND ROWNUM <=1)
    结贴。
      

  5.   

    --查询
    select ID,FILE_PATH,FILE_VERSION_ID from A where exists(select id from b where b.file_paht=A.FILE_PATH);
    --更新 
    update A set a.FILE_VERSION_ID=(select id from b where b.file_paht=A.FILE_PATH where rownum=1)
      

  6.   


      这个  等于就是 同一个FILE_PATH每次都是返回的相同的id  这个不知道满足LZ需求么  如果是每次返回最新版本id  这么应该可以吧update A set FILE_VERSION_ID = ( SELECT max(B.ID) FROM B WHERE A.FILE_PATH = B.FILE_PATH)
      

  7.   

    update A set FILE_VERSION_ID = ( SELECT B.ID FROM B WHERE A.FILE_PATH = B.FILE_PATH AND ROWNUM <=1)