【问题标题】:SQL query to overwrite records覆盖记录的 SQL 查询
【发布时间】:2013-02-18 17:32:34
【问题描述】:

我有一个配置表,其中有 30 条默认配置记录。对于其他配置,我为那些不同的设置添加新记录。 例如:

ConfigurationId     SettingKey          SettingValue
1(default)             A                    2
1(default)             B                    5
1(default)             C                    9
.                      .                    .
.                      .                    .
2                      A                    5
3                      B                    7

在这里您可以看到默认设置的 ConfigurationId 1 具有所有 30 个设置。 对于其他配置,例如 2 仅针对 A 设置,而 3 仅针对 B

所以当我获取 Id 2 的记录时,我希望 2 中不存在的所有 SettingKey 和 SEttingValue 应该来自 1 并且存在于 2 中的将被覆盖 像这样

ConfigurationId     SettingKey          SettingValue
2                     A                    5
2                     B                    5
2                     C                    9

所以对于 2,所有 30 个设置都应该来自 1,这将被 2 中可用的设置覆盖。在上面的 SettingKey A 已被 2 覆盖。B,C 来自 1

如果我不清楚,请问我。

【问题讨论】:

  • [linq] 标签是干什么用的?

标签: sql sql-server linq


【解决方案1】:

你可以试试这个。

DECLARE @SeletedConfigurationID int

SELECT Settingkey, SettingValue
FROM
    (
    SELECT SettingKey, SettingValue,
        row_number() over (partition BY SettingKey ORDER BY ConfiurationID DESC) AS rn
    FROM Configuration
    WHERE ConfigurationID = 1
        OR ConfigurationID = @SelectedConfigurationID
    ) AS Settings
WHERE rn = 1
ORDER BY SettingKey

内部派生查询从默认配置 (ConfigurationID = 1) 中获取行以及所选配置的行。它为每个设置键设置一个行号,其中第 1 行将来自所选配置(如果存在)。否则,使用默认配置中的值。

外部查询只选择第一行,其中行号为 1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2015-11-20
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    相关资源
    最近更新 更多