如果没有按值匹配,请选择“key = value”或“key is null”的单个记录

时间:2016-02-18 21:05:49

标签: sql

不是数据库人,但需要完成工作。数据库包含配置设置,其中ID表示配置ID。当KEY为null时,这是指定配置ID的默认值。

ID | Key    | Value
-- | ------ | -----
 1 | null   | 'joseph'
 2 | null   | 'john'
 1 | 'test' | 'joe'
 3 | null   | 'sam'

尝试弄清楚如何选择所有唯一配置ID并根据指定的KEY覆盖该值。

declare @key varchar(250) = 'test'
SELECT ???

ID | Key    | Value
-- | ------ | -----
 1 | 'test' | 'joe'
 2 | null   | 'john'
 3 | null   | 'sam'

尝试了很多事情,从unioncoalesce再到full outer join,但似乎没有什么能让我更接近我想去的地方。

尝试where (key is null or key = @key) group by id,但我不确定使用MAX(值)是否适用于joe等字符串与joseph相比。

我觉得我可能需要在临时表中选择所有空项然后加入另一个按键搜索的select语句,但我不确定是否有办法用单个查询来完成。< / p>

1 个答案:

答案 0 :(得分:3)

根据您的评论,我相信您正在寻找:

(这是SQL Server语法,您没有指定服务器类型。)

SELECT *
FROM   YourTable yt
JOIN (
    SELECT ID, MAX(Key) AS Key
    FROM   YourTable
    WHERE  Key IS NULL
        OR Key = @key
    GROUP BY ID
) inQ ON inQ.KD = yt.ID AND inQ.Key = yt.Key