Обновить значение таблицы из второй таблицы, присоединившись к третьей таблице - PullRequest
0 голосов
/ 17 июня 2020

У меня есть 3 таблицы: TableA, TableB и Table C

Я хочу перенести данные из столбца TableA DateA в столбец TableB DateB, только если поле даты имеет значение NULL в таблице B (я не 'не хочу перезаписывать какие-либо существующие данные)

Мне нужно объединить TableA и TableB, используя Table C, чтобы соответствовать строкам A и B, которые должны быть обновлены их RobotNumber. 1007 *

RobotNumber         DateA
11                  12/12/2015
12                  01/05/2018
13                  05/03/2019

TableB

RobotID       Date
2             null
3             07/01/2018
4             null

Table C

RobotNumber RobotID      
11          2
12          3
13          4

Я попытался присоединиться к таблицам и выполнить обновление таким образом, но время запроса истекло:

UPDATE TableB 
SET TableB.DateB = TableA.DateA
FROM TableB 
inner join TableC c on TableB.RobotID = c.RobotID
inner join TableA a on a.RobotNumber = c.RobotNumber
where TableB.RobotID not in (select RobotID from TableB where DateB is not null)

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Я бы начал с избавления от NOT IN:

UPDATE TableB 
    SET TableB.DateB = TableA.DateA
    FROM TableB JOIN
         TableC c 
         ON TableB.RobotID = c.RobotID JOIN
         TableA a 
         ON a.RobotNumber = c.RobotNumber
    WHERE TableB.DateB is null;

Затем у вас также должны быть индексы для TableC(RobotID) и TableA(RobotNumber, DateA).

0 голосов
/ 17 июня 2020

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

Другими словами, у вас должны быть индексы по крайней мере для столбца RobotID в TableB и TableC и в столбце RobotNumber в TableA и TableC.

Кроме того, если RobotID является первичным ключом в TableB, вы можете изменить условие WHERE в последней строке к: WHERE TableB.DateB IS NOT NULL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...