Обновление столбца в таблице из другой таблицы с помощью объединения - PullRequest
0 голосов
/ 24 мая 2018

У меня есть две таблицы, которые мне нужно скопировать из таблицы 2 в таблицу 1. Я хочу, чтобы вылет столбца в таблице 1. обновлялся при сопоставлении в таблице 2.

Условие Таблица 2 имеет несколько элементов для таблицы 1 (таблица 1 имеет много связей с таблицей 2).Поэтому в этом случае мне нужно отсортировать его по RotationOrder и взять первую строку.

Таблица 1

Id  Code    Departure
479 JJ1256  NULL
480 SR1255  NULL
481 PFOBLEM NULL
482 SO1301  NULL
483 TS1302  NULL
484 YB1305  NULL
485 CU1303  NULL

Таблица 2

Id  Departure   RotationOrder    CanLoad
479 NULL    1       1
480 NULL    1       2                 1
481 NULL    1       3                 1
482 NULL    1       4
482 NULL    3
482 NULL    2
482 NULL    4
483 2013-01-21  1                     1
483 NULL    3
483 NULL    4
483 NULL    6

Что я пробовал

UPDATE table1 set Departure = (select top 1 table2.Departure from table2 
INNER JOIN table1 on table1.Id = table2.Id  where CanLoad =1 order by 
RotationOrder )
FROM TABLE1  INNER JOIN TABLE2 
ON TABLE1.Id = TABLE2.Id

Задача Этот запрос копирует первое нулевое значение из таблицы2 и вставляет его в таблицу1.что неверно.

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Игнорировать строки с нулевым значением.Это предполагает, что у вас есть одна ненулевая строка на Id

UPDATE Table1 set Departure = Table2.departure
FROM TABLE1  INNER JOIN TABLE2 
ON TABLE1.Id = TABLE2.Id where Table2.canload =1 and Table2.deprture is not null 
0 голосов
/ 24 мая 2018

Вот как вы захотите это сделать:

UPDATE T1
SET Departure = T2.Departure
FROM Table1 T1
     CROSS APPLY (SELECT ca.*
                  FROM Table2 ca
                  WHERE T1.Id = ca.Id
                  ORDER BY ca.RotationOrder) T2;

Обратите внимание на использование псевдонима таблицы в предложении UPDATE.Если вы используете фактическое имя таблицы (а не ее псевдоним), вы технически объявляете 2-е Table1, которое может / действительно вызывает странное поведение, так как технически создает декартово произведение.Поэтому очень важно использовать синтаксис UPDATE [Table Alias] при использовании предложения FROM в операторе UPDATE.

0 голосов
/ 24 мая 2018

Крест применить топ 1, любимая классика:

UPDATE t1 set Departure = q.Departure
FROM table1  t1
cross apply 
(
    SELECT TOP 1 Departure
    FROM table2
    WHERE t1.Id=table2.Id
    ORDER BY RotationOrder asc
)q  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...