Обновление SQL из одной таблицы в другую на основе идентификатора - PullRequest
0 голосов
/ 13 октября 2018

У меня есть база данных с 2 таблицами - Employees и 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 в Employees таблице.

Окончательный результат должен выглядеть следующим образом:

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

Пожалуйста, дайте мне знать, если у вас есть какие-либо решения по этому поводу.Спасибо!

Я использую SQL Server.

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Этот запрос обновит таблицу Employee из таблицы Group, а 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
0 голосов
/ 13 октября 2018

Просто используйте 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.

...