SQL - 从多个表的最大值更新单个列

时间:2014-03-20 13:54:04

标签: sql sql-server tsql

我有一个看起来像这样的表我想要更新:

表A

[Id] IDENTITY INT NOT NULL
[Name] NVARCHAR(200) NOT NULL
[Date] DATETIME NULL

另外5个表格如下:

表B-F

[Id] IDENTITY INT NOT NULL
[TableAId] INT NOT NULL
[Date] DATETIME NOT NULL

CONSTRAINT [FK_TableB_TableA] FOREIGN KEY [TableAId] REFERENCES [TableA]([Id])
表A上的

[Date]是一个新列,在设置值后应该是不可为空的。设置的值必须是任何表B-F中的最高[Date]。最有效的方法是什么?

1 个答案:

答案 0 :(得分:0)

这看起来应该可以解决问题。

UPDATE [t]
SET [Date] = (
    SELECT MAX([Dates].[Date])
    FROM (
        SELECT MAX([Date]) AS [Date] FROM [TableB] WHERE [TableAId] = [t].[Id]
        UNION ALL
        SELECT MAX([Date]) AS [Date] FROM [TableC] WHERE [TableAId] = [t].[Id]
        UNION ALL
        SELECT MAX([Date]) AS [Date] FROM [TableD] WHERE [TableAId] = [t].[Id]
        UNION ALL
        SELECT MAX([Date]) AS [Date] FROM [TableE] WHERE [TableAId] = [t].[Id]
        UNION ALL
        SELECT MAX([Date]) AS [Date] FROM [TableF] WHERE [TableAId] = [t].[Id]
    ) AS [Dates]
)
FROM [TableA] AS [t]