表
ID | col1 | col2
-------------------------
1 | val1 | val2
2 | val1 | null
3 | val1 | val3
4 | val5 | null
客户端将始终传递有效的col1和col2值以选择表格中可能不存在col2的单行。因此,如果col2可用,则它应返回带有col2的行,否则返回包含col2 = null和col1
的行return ID = 2 if col1 = val1 and col2 = val10
return ID = 3 if col1 = val1 and col2 = val3
如何通过单个SQL查询来实现这一目标?
答案 0 :(得分:1)
这会奏效。如果没有top 1,查询可能会选择2行,所以我命令它返回col2首先不为null的那一行。
select top 1 * from table1
where col1 = @param1 and (col2 is null or col2 = @param2)
order by case when col2 is null then 1 else 0 end
答案 1 :(得分:1)
select * from table1 where col1 = @col1 and col2 = @col2
union
select * from table1 as t where col1 = @col1 and col2 is null
and not exist (select * from table1 as c where c.col1 = t.col1 and c.col2 = @col2)
我不确定前1的解决方案是否更快,有时订购非常慢。