我有一个看起来像这样的数据库表:
ForeignId: int
Key: varchar
Value: varchar
其中 ForeignId 和 Key 构成唯一主键
我可以很容易地确定为给定文档集定义的总键集
SELECT DISTINCT [Key] FROM [Table] WHERE [ForeignId] IN (...)
但是,我想做的是进一步区分每个属性的每个值的值,如果每个 ForeignId 都相同(如果值不同,则为 NULL 或其他一些标记值)。
如果我这样做:
ForeignId 键值 1 1 安 1 2 乙 1 3℃ 2 1 安 2 2 Z 3 1 安 3 2 Z
我想要像这样的输出:
核心价值 1 A -- 所有 3 个都相同 2 NULL -- 多个不同的值(B 和 Z) 3 NULL -- 只为一个 ForeignId 定义
我能想到的最好的是
SELECT [Key], MAX([Value]), MIN([Value]) FROM [Table]
WHERE [ForeignId] IN (...)
GROUP BY [Key]
并寻找返回的最大值和最小值不同的任何实例。如果它们相同,我假设所有值都匹配,如果它们不同,我知道有多个不同的值。
这里缺少的是第三部分,如果任何单个项目根本没有定义,我需要将值标记为不同。在上面的示例中,我当前的代码将返回键 3 的值 C,即使它没有为某些 ForeignId 定义。