none
如何将A、B两个表求的的结果更新到C表中去? RRS feed

  • 问题

  • 如何将A、B两个表求的的结果更新到C表中去?

        数据库有3个表,分别是A、B、C

        A有3个列,是a地、a金、a号;
        B有1个列,是b地;
        C有2个列,是c金、c号

        我需要把根据A、B两个表选择出来的a金更新到C表中的c金,条件是a号=c号

        下面是我大致写的代码,不清楚错误出在何处,具体该怎么写呢?


    update C
    set c金=
    (
        select a金
        from A join B on A.a地=B.b地
    )
    where c号=a号


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2012年9月29日 8:10

答案

  • --> 测试数据: @A
    declare @A table (a地 int,a金 varchar(1),a号 int)
    insert into @A
    select 1,'a',1 union all
    select 2,'b',2 union all
    select 3,'c',3 union all
    select 4,'d',4
    
    --> 测试数据: @B
    declare @B table (b地 int)
    insert into @B
    select 1 union all
    select 3
    
    --> 测试数据: @C
    declare @C table (c金 varchar(1),c号 int)
    insert into @C
    select 'h',1 union all
    select 'h',2 union all
    select 'h',3 union all
    select 'h',4
    
    update @C 
    set c金=a.a金
    from @C c join @A a on c.c号=a号
    where a.a地 in (select b地 from @B)
    
    select * from @C
    /*
    c金   c号
    ---- -----------
    a    1
    h    2
    c    3
    h    4
    */
    其实就是这个意思。
    2012年9月29日 11:42
    版主

全部回复

  • --根据你的意思应该是这样的:
    update C set c金=D.a金
    from C join (select A.* from A join B  on A.a地=B.b地) D
    on C.c号=D.a号

    2012年9月29日 11:40
    版主
  • --> 测试数据: @A
    declare @A table (a地 int,a金 varchar(1),a号 int)
    insert into @A
    select 1,'a',1 union all
    select 2,'b',2 union all
    select 3,'c',3 union all
    select 4,'d',4
    
    --> 测试数据: @B
    declare @B table (b地 int)
    insert into @B
    select 1 union all
    select 3
    
    --> 测试数据: @C
    declare @C table (c金 varchar(1),c号 int)
    insert into @C
    select 'h',1 union all
    select 'h',2 union all
    select 'h',3 union all
    select 'h',4
    
    update @C 
    set c金=a.a金
    from @C c join @A a on c.c号=a号
    where a.a地 in (select b地 from @B)
    
    select * from @C
    /*
    c金   c号
    ---- -----------
    a    1
    h    2
    c    3
    h    4
    */
    其实就是这个意思。
    2012年9月29日 11:42
    版主
  • --> 测试数据: @A
    declare @A table (a地 int,a金 varchar(1),a号 int)
    insert into @A
    select 1,'a',1 union all
    select 2,'b',2 union all
    select 3,'c',3 union all
    select 4,'d',4

    --> 测试数据: @B
    declare @B table (b地 int)
    insert into @B
    select 1 union all
    select 3

    --> 测试数据: @C
    declare @C table (c金 varchar(1),c号 int)
    insert into @C
    select 'h',1 union all
    select 'h',2 union all
    select 'h',3 union all
    select 'h',4



    UPDATE @C
    SET c金=t.a金
    FROM @C c INNER JOIN (SELECT * FROM @A a INNER JOIN @B b ON a.a地=b.b地)AS t ON c.c号=t.a号

    SELECT * FROM @C

    给我写信: QQ我:点击这里给我发消息

    2012年9月29日 15:53