代码之家  ›  专栏  ›  技术社区  ›  user989988

基于id从一个表到另一个表的SQL更新

  •  0
  • user989988  · 技术社区  · 6 年前

    我有一个有两个表的数据库- Employees Group .

    员工 有以下列:

    Id (primary key), Name, GroupId
    

    有以下列:

    Id (primary key), EmployeeId (foreign key), GroupId
    

    这就是 表格:

    +-----+------+---------+
    | Id  | Name | GroupId |
    +-----+------+---------+
    | 123 | abc  | 000     |
    | 456 | def  | 000     |
    +-----+------+---------+
    

    这就是 表格:

    +-----+------------+---------+
    | Id  | EmployeeId | GroupId |
    +-----+------------+---------+
    | pqr | 456        | g01     |
    | uvw | 123        | g02     |
    | xyz | 123        | g03     |
    +-----+------------+---------+
    

    我需要任何一个 GroupId (例如顶部的一个)一个 EmployeeId 表和更新 组ID 在里面 桌子。

    最终结果如下:

    +-----+------+---------+
    | Id  | Name | GroupId |
    +-----+------+---------+
    | 123 | abc  | g01     |
    | 456 | def  | g02     |
    +-----+------+---------+
    

    请让我知道,如果你有任何解决办法在同一方面。谢谢!

    我正在使用SQL Server。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    只是使用 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

        2
  •  1
  •   Community CDub    5 年前

    此查询将从组表更新职员表,组表的主键为整数

    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