将行更新为另一表中行的副本而未设置

时间:2018-12-20 07:33:43

标签: mysql sql database

我想同步多个表。我想从一个表中复制一行并将其更新到另一个表,但是我不想指定列名。这是因为我不想为每个表分别对sql查询进行硬编码。

我尝试了几种变体,它可以与insert一起使用,但是我无法通过Update找到解决方案

insert into t2 select * from t1 where sno=2;

在此代码中,我不需要将列名称传递给Insert,它会自动知道列列表。我想通过Update实现相同的功能,我不想在SET部分中传递列列表。

2 个答案:

答案 0 :(得分:0)

您始终需要使用SET并一一分配列。但是,您可以使用子查询来使用另一个表更新源表

update
  Table1 as T1
  inner join (
    select *
    from Table2 
    where ...
  ) as t2 on t1.Id = t2.Id
set T1.something = t2.something

答案 1 :(得分:0)

好吧,如果列相同,则可以执行以下操作:

const viewRouteResolver = { data: AppResolver };
{
path: ‘’,
resolve: viewRouteResolver,
canActivate: [LoggedInGuard],
children: [
   {
      path:  ‘’,
      redirectTo:  ‘/mainView’,
      pathMatch: ‘full’,
      resolver: viewRouteResolver
   },
   {
     path: ‘menu1’,
     loadChildren: ‘app/menu/menu1.module#Menu1Module’,
     resolve: viewRouteResolver
   }
 ]
}

我不明白为什么会用delete from t2 where exists (select 1 from t1 where t1.id = t2.id); insert into t2 select * from t1; 来替换数据(尽管我仍然会列出所有列)。

如果列不相同,则需要列出更改的列。