现在有 A表(ID,POSITORY_ID,NO,,NAME,DATE),B表(ID,SUBSCRIBER_ID,.....) 
我想链接A B 两表,通过ID,知道的条件是 SUBSCRIBER_ID,最后要修改A表的POSITORY_IDselect * 
from  A  a ,B b
where  a.id = b.id
and b.subscriber_id  in (..........)
更新的时候不知道该怎么写,目的是 UPDATE A  set a.pository_id = 782137621另外我备份表的时候 CREATE TABLE TEMP_A_20110811 
as
select * from  ......
估计两个表有一样的字段把。
时,提示有重复的字段。

解决方案 »

  1.   


    --merge into
    MERGE INTO A
    USING (SELECT * FROM B WHERE B.SUBSCRIBER_ID IN (..........)) B
    ON (A.ID = B.ID)
    WHEN MATCHED THEN
      UPDATE SET A.POSITORY_ID = 782137621;--普通update
    UPDATE A
       SET A.POSITORY_ID = 782137621
     WHERE EXISTS (SELECT 1
              FROM B B
             WHERE A.ID = B.ID
               AND B.SUBSCRIBER_ID IN (..........));
      

  2.   

    我使用的普通update,结果所有的记录都更新了,不是更新的指定行。
    创建表 a_test         
    id   pository_id
    1        123123123 
    3       113212312
    4         123123
    6        12312312
    表 b_test
    id    subscriber_id 
    1       1111
    2       2222
    3       3333
    4       4444
    5       5555
    UPDATE a_test a
       SET A.POSITORY_ID = 782137621
     WHERE EXISTS (SELECT 1
              FROM b_test B,a_test A
             WHERE A.ID = B.ID
               AND B.SUBSCRIBER_ID IN (2222,3333,4444));
    执行子查询select 1....,返回
    1

    这个应该是匹配的第3行,第4行执行整个 update.查询表a_test 发现pository_id 全部变成了782137621
    不理解了。
      

  3.   


    --请注意看下我的回复。
    UPDATE A
       SET A.POSITORY_ID = 782137621
     WHERE EXISTS (SELECT 1
              FROM B B  --这里我只有一个表,第二个B只是表的别名。
             WHERE A.ID = B.ID
               AND B.SUBSCRIBER_ID IN (..........));--而你的写法
    UPDATE a_test a
      SET A.POSITORY_ID = 782137621
     WHERE EXISTS (SELECT 1
      FROM b_test B,a_test A --这里有俩表 改成【b_test B】去掉后后面的【,a_test A】
      WHERE A.ID = B.ID
      AND B.SUBSCRIBER_ID IN (2222,3333,4444));
      

  4.   

    UPDATE a_test
       SET A.POSITORY_ID = 782137621
     WHERE EXISTS (SELECT 1
              FROM b_test B  --这里我只有一个表,第二个B只是表的别名。
             WHERE a_test.ID = B.ID
               AND B.SUBSCRIBER_ID IN (2222,3333,4444));一开始我也是用你的方法,执行以后提示:
    ORA-00904:"A_TEST","ID": invalid identifier 
    然后才加了个表A的。
      

  5.   


    [TEST@myorcl] SQL>select * from a_test;        ID POSITORY_ID
    ---------- -----------
             1   123123123
             3   113212312
             4      123123
             6    12312312[TEST@myorcl] SQL>select * from b_test;        ID SUBSCRIBER_ID
    ---------- -------------
             1          1111
             2          2222
             3          3333
             4          4444
             5          5555[TEST@myorcl] SQL>UPDATE A_TEST
      2     SET POSITORY_ID = 782137621
      3   WHERE EXISTS (SELECT 1
      4            FROM B_TEST B --这里我只有一个表,第二个B只是表的别名。
      5           WHERE A_TEST.ID = B.ID
      6             AND B.SUBSCRIBER_ID IN (2222, 3333, 4444));已更新2行。[TEST@myorcl] SQL>select * from a_test;        ID POSITORY_ID
    ---------- -----------
             1   123123123
             3   782137621
             4   782137621
             6    12312312[TEST@myorcl] SQL>
      

  6.   

    找到我的问题了, update A_TEST a
    UPDATE 后面的表是不能跟别名的