不是数据库人,但需要完成工作。数据库包含配置设置,其中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'
尝试了很多事情,从union
到coalesce
再到full outer join
,但似乎没有什么能让我更接近我想去的地方。
尝试where (key is null or key = @key) group by id
,但我不确定使用MAX(值)是否适用于joe
等字符串与joseph
相比。
我觉得我可能需要在临时表中选择所有空项然后加入另一个按键搜索的select语句,但我不确定是否有办法用单个查询来完成。< / p>
答案 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