sql—通过连接第三个表从第二个表更新表值

des4xlb0  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(326)

我有3张table,A,B和C
我想将数据从tablea column datea迁移到tableb column dateb,前提是表b中的date字段为null(我不想覆盖任何现有数据)
我需要使用tablec连接tablea和tableb,以匹配a和b行,这些行应该由它们的robotnumber更新。

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

表B

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

表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)
vbopmzt1

vbopmzt11#

我会从摆脱 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) .

u59ebvdq

u59ebvdq2#

确保在中使用的列上有索引 JOIN 条款。
换句话说,您至少应该在 RobotID 中的列 TableB 以及 TableC 在街上 RobotNumber 中的列 TableA 以及 TableC .
另外,如果 RobotID 是中的主键 TableB ,您可以更改 WHERE 最后一行中的条件: WHERE TableB.DateB IS NOT NULL

相关问题