SQL根据ID从一个表更新到另一个表

时间:2018-10-13 01:15:31

标签: sql sql-server database-migration ef-core-2.1

我有一个包含2个表的数据库-freeEmployees

Group具有以下列:

Employees

Id (primary key), Name, GroupId 具有以下列:

Group

这是Id (primary key), EmployeeId (foreign key), GroupId 表:

Employees

这是+-----+------+---------+ | Id | Name | GroupId | +-----+------+---------+ | 123 | abc | 000 | | 456 | def | 000 | +-----+------+---------+ 表:

Group

我需要从+-----+------------+---------+ | Id | EmployeeId | GroupId | +-----+------------+---------+ | pqr | 456 | g01 | | uvw | 123 | g02 | | xyz | 123 | g03 | +-----+------------+---------+ 表中获取GroupId中的任何一个EmployeeId(例如前一个),并更新Group表中的GroupId。 / p>

最终结果应如下:

Employees

如果您对此有任何解决方案,请告诉我。谢谢!

我正在使用SQL Server。

2 个答案:

答案 0 :(得分:1)

只需使用cross apply

update e
    set groupid = g.groupid
    from employees e cross apply
         (select top (1) g.*
          from groups g
          where e.employeeid = g.employeeid
         ) g;

任意 employees更新groupid似乎很奇怪。如果您特别想要一个(例如最旧的),则可以向子查询添加order by子句。

答案 1 :(得分:1)

此查询将从组表更新Employee表,并且组表的PK为整数

UPDATE e
   SET GroupId = g.GroupId
  FROM Employees e INNER JOIN 
        (SELECT EmployeeId, GroupId FROM [Group] ORDER BY Id DESC) g 
        ON e.Id = g.EmployeeId