基于多个表内部联接的更新列

时间:2019-07-23 05:52:29

标签: sql sql-server

我有一些下表,其中OrigMachine.IDOrigKeys.Id相同。

OrigMachine: ID, Name
OrigKeys :ID, Key

BackupMachine : ID,Name
BackupKeys : ID, Key

例如,我的OrigMachine表如下所示。

ID, Name
1,  Alfa
2,  Beta

我的BackupMachine表如下所示。

ID, Name
1,  Beta
2,  Gamma

我的OrigKeys表如下所示。

ID, Name
1,  AlfaParticle
2,  Beta1particle

我的backupKeys表如下所示。

ID, Name
1,  BetaParticle
2,  GammaParticle

更新后,预期的OrigKeys表如下所示。

ID, Name
1,  AlfaParticle
2,  BetaParticle

需要基于OrigMachine.Name = BackupMachine.Name用BackupKeys.Key更新OrigKeys.Key

这是我想出的,但似乎没有用。

UPDATE [DB].[dbo].[OrigKeys]
SET [DB].[dbo].[OrigKeys].[Key] = [TS2].[Key]
FROM [DB].[dbo].[BackupMachine] AS TM2
    INNER JOIN [DB].[dbo].[BackupKeys] TS2 ON [TS2].[Id] = [TM2].[Id]
    INNER JOIN [DB].[dbo].[OrigMachine] TM1 ON [TM1].[Name] = [TM2].[Name]
WHERE [TM1].[Name] = [TM2].[Name];

我想念什么?

3 个答案:

答案 0 :(得分:0)

您可以尝试以下操作-在为表名定义别名后,您需要在更新时指定别名。

UPDATE TM1 
SET TM1.[Key] = TS2.[Key]
FROM [DB].[dbo].[BackupMachine] AS TM2
    INNER JOIN [DB].[dbo].[BackupKeys] TS2 ON TS2.[Id] = TM2.[Id]
    INNER JOIN [DB].[dbo].[OrigMachine] TM1 ON TM1.[Name] = TM2.[Name]

答案 1 :(得分:0)

尝试一下:

UPDATE Org  
SET Org.[Key] = TM2.[Key]
FROM [DB].[dbo].[BackupMachine] AS TM2
INNER JOIN [DB].[dbo].[BackupKeys] TS2 ON [TS2].[Id] = [TM2].[Id]
INNER JOIN [DB].[dbo].[OrigMachine] TM1 ON [TM1].[Name] = [TM2].[Name]
INNER JOIN [DB].[dbo].[OrigKeys] AS Org ON Org.ID = TM1.ID;

答案 2 :(得分:0)

FROM列表中缺少要更新的表。请将该表添加到列表中,并与其他任何表的关系键建立关系。

UPDATE A
SET A.[Key] = [TS2].[Key]
FROM 
[DB].[dbo].[OrigKeys] A
-- You need to add the table you wants to update 
-- in the FROM List. Please establish a relation 
-- between A and other table now 
-- like ON A.[...] = Other tables column ref 
INNER JOIN [DB].[dbo].[BackupMachine] AS TM2 --May be here like ON ...

INNER JOIN [DB].[dbo].[BackupKeys] TS2 ON [TS2].[Id] = [TM2].[Id]
INNER JOIN [DB].[dbo].[OrigMachine] TM1 ON [TM1].[Name] = [TM2].[Name]
WHERE [TM1].[Name] = [TM2].[Name];