table1
----------
userid state date
100     a    2010-03-20
101     b    2010-03-20
102     a    2010-03-20
-------
table2
--------
userid state
101      a
102      b
-----
table1执行UPDATE结果为
--------
userid state date
100     a    2010-03-20
101     a    2010-03-20
102     b    2010-03-20用UPDATE语句可以一次执行么?

解决方案 »

  1.   

    update table1 a
    set state=(select b.state from table2 b where a.userid=b.userid)
    where exists (select 1 from table2 b where a.userid=b.userid)
      

  2.   

    --方法1
    UPDATE table1 a
       SET state =
           (SELECT state FROM table2 t WHERE t.userid = a.userid)
     WHERE a.userid IN (SELECT userid FROM tables);--方法2
    UPDATE table1 a
       SET state =
           (SELECT state FROM table2 t WHERE t.userid = a.userid)
     WHERE EXISTS (SELECT 1 FROM table2 t WHERE t.userid = a.userid);
      

  3.   

    sorry,上面有个表名写错了,这个
    --方法1
    UPDATE table1 a
       SET state =
           (SELECT state FROM table2 t WHERE t.userid = a.userid)
     WHERE a.userid IN (SELECT userid FROM table2);--方法2
    UPDATE table1 a
       SET state =
           (SELECT state FROM table2 t WHERE t.userid = a.userid)
     WHERE EXISTS (SELECT 1 FROM table2 t WHERE t.userid = a.userid);