update dbo.test2  set dbo.test2.l1h4= 
(select b.l1h4 from test1 b inner join test2 c on c.nsrnbm = b.nsrnbm)
如图有test1和test2两张表,主键为BM想把test1里的l1h4里的值update根据BM到test2去,为什么会出现这个错误?

解决方案 »

  1.   

    update dbo.test2  set dbo.test2.l1h4= 
    (select top 1  b.l1h4 from test1 where test2.nsrnbm = b.nsrnbm)因为你的条件 关联 如果 有一对多有关系。那么出来就会两值了。
      

  2.   

    这两张表应该不会出来重复值啊,两张表bm字段distinct都是1114行啊
      

  3.   

    这两张表应该不会出来重复值啊,两张表bm字段distinct都是1114行啊你那样写还有一个错误点就在于没有跟UPDATE 后面的源表关联了。 按我上面的就可以了。通过子查询关联就可以。或者你用INNER JOIN 方式 
      

  4.   

    这两张表应该不会出来重复值啊,两张表bm字段distinct都是1114行啊你那样写还有一个错误点就在于没有跟UPDATE 后面的源表关联了。 按我上面的就可以了。通过子查询关联就可以。或者你用INNER JOIN 方式 
    那同时更新三个字段是不是这样子写?update dbo.test2 set 
    (dbo.test2.l1h4,dbo.test2.l1h8,dbo.test2.l1h9) =
    (select l1h4,l1h8,l1h9 from test1 where  test2.nsrnbm = b.nsrnbm) 
    为啥编译说第二行
    '(' 附近有语法错误?
      

  5.   

    这两张表应该不会出来重复值啊,两张表bm字段distinct都是1114行啊你那样写还有一个错误点就在于没有跟UPDATE 后面的源表关联了。 按我上面的就可以了。通过子查询关联就可以。或者你用INNER JOIN 方式 
    那同时更新三个字段是不是这样子写?update dbo.test2 set 
    (dbo.test2.l1h4,dbo.test2.l1h8,dbo.test2.l1h9) =
    (select l1h4,l1h8,l1h9 from test1 where  test2.nsrnbm = b.nsrnbm) 
    为啥编译说第二行
    '(' 附近有语法错误?你可以看联机帮助的UPDATE 语法。。
      

  6.   

    这两张表应该不会出来重复值啊,两张表bm字段distinct都是1114行啊你那样写还有一个错误点就在于没有跟UPDATE 后面的源表关联了。 按我上面的就可以了。通过子查询关联就可以。或者你用INNER JOIN 方式 
    那同时更新三个字段是不是这样子写?update dbo.test2 set 
    (dbo.test2.l1h4,dbo.test2.l1h8,dbo.test2.l1h9) =
    (select l1h4,l1h8,l1h9 from test1 where  test2.nsrnbm = b.nsrnbm) 
    为啥编译说第二行
    '(' 附近有语法错误?你可以看联机帮助的UPDATE 语法。。话说我知道了,我那是以前oracle的写法,sqlserver不支持。