给你一个例子:
update A set A2=T.B2 
from (select A.A1,B.B2 from A,B where A.A1=B.B1) T
where A.A1=T.A1

解决方案 »

  1.   

    skysyan() 给出的子查询 select A.A1,B.B2 from A,B where A.A1=B.B1
    同SELECT  a1,b2 FROM a INNER JOIN b ON a1=b1
    有没有区别,哪个好?
      

  2.   

    update A set A2=T.B2 
    from (select A.A1,B.B2 from A,B where A.A1=B.B1) T
    where A.A1=T.A1
      

  3.   

    update A set A2=T.B2 
    from (select A.A1,B.B2 from A,B where A.A1=B.B1)
    为什么不加上T 就会报错?
      

  4.   

    from后面要跟对象,而select一大堆不算对象,不给一个名字,后面就不好引用
      

  5.   

    请教 那么 from 的到底是T (表) 还是(select A.A1,B.B2 from A,B where A.A1=B.B1)
      

  6.   

    T代表select A.A1,B.B2 from A,B where A.A1=B.B1 是对查询后的结果再查询的,此时若给A.A1,B.B2 别名则外层的 from就只能对别名起作用了。
      

  7.   

    1.再加个identity 有什么方法?原来的问题
    2.update A set A2=T.B2 
    from (select A.A1,B.B2 from A,B where A.A1=B.B1) T
    where A.A1=T.A1

    (select A.A1,B.B2 from A,B where A.A1=B.B1)是不是没有用的?
    ?实际 from 的是T
      

  8.   

    T代表select A.A1,B.B2 from A,B where A.A1=B.B1 那么不时T表了?
      

  9.   

    上面的没有意义,下一问,T就好象是一个号码,它代表slect出来的数据集,访问这个数据集中的内容,和其它有重名的就通过T来区别它
      

  10.   

    先弄个让你用吧不用其它列,我在调另外一种方法
    declare @A varchar(10)
    set @A=''
    update 表 set co1=(case when co1='a' then co1 else @A end),
    @A=(case when co1='a' then co2 else @A end)
      

  11.   

    T 是个结果集.那么我在数据库里面先建立一个T表.T 结果集和T表两个对象同名,也不会报错的。为什么? 那么update A set A2=T.B2 
    from (select A.A1,B.B2 from A,B where A.A1=B.B1) T
    where A.A1=T.A1
    中From  的究竟是T 结果集 还是我建立一个T表?wgzaaa() 的方法正确。
    这个查询是否把@A update 了?解释一下。create table Test
    (Co1 varchar(5),
    co2 varchar(10)
    )
    insert into test (Co1,co2) values('a'  , 'xyz')
    insert into test (Co1,co2) values('b' , 'm')
    insert into test (Co1,co2) values('b'  ,  'n')
    insert into test (Co1,co2) values('b'  , 'y')
    insert into test (Co1,co2) values('a' ,  'lpg')
    insert into test (Co1,co2)values('b'  , 'u')
    insert into test (Co1,co2) Values('b'  , 'f')
    values(b , m)
    values(b  ,  n)
    values(b  , y)
    values(a  ,  lpg)
    values(b  , u)
    values(b  , f
    )
    godeclare @A varchar(10)
    set @A=''
    update test set co1=(case when co1='a' then co1 else @A end),
    @A=(case when co1='a' then co2 else @A end)
    go
    select * from test
    a xyz
    xyz m
    xyz n
    xyz y
    a lpg
    lpg u
    lpg f
      

  12.   

    应该对对象的存放地址什么的不一样吧,只能哪位高手来说一下了,
    有时你自己发现了规律就去验证,不要等别人肯定才接受,是update了,而且是先给变量赋值
      

  13.   

    多谢wgzaaa() 
    如果另外一个调出来了,也请贴出来看看!