我使用了永远真实的陈述,例如1 = 1
在MYSQL中使用以下语法的where子句的case语句:
select * from tablename where
(case when tablefield is not null then
then tablefield = 'value'
else 1 = 1 end)
我想知道如何在where子句中的sqlserver / tsql case语句中使用else 1 = 1
(始终为true语句)。
答案 0 :(得分:6)
你不会使用你只会写一个多条件语句的情况。在你的情况下,它看起来像
Where (tablefield = 'value'
OR tablefield is null)
答案 1 :(得分:1)
如果要使用TSQL CASE函数,可以执行以下操作:
select * from tablename where 1 =
(case when tablefield is not null then
(case when tablefield = 'value' then 1 else 0 end)
else 1 end)
可以简化为:
select * from tablename where 1 =
(case when tablefield is null then 1 when tablefield = 'value' then 1
else 0 end)
你可以省略“else 0”部分,因为当没有找到匹配时,返回NULL(不等于1)。即:
select * from tablename where 1 =
(case when tablefield is not null then
(case when tablefield = 'value' then 1 end)
else 1 end)
select * from tablename where 1 =
(case when tablefield is null then 1 when tablefield = 'value' then 1 end)
答案 2 :(得分:0)
抱歉,我只是混淆了查询,我打算在参数变量为null而不是tablefield时询问条件 在这种情况下,查询可能如下所示:
从tablename中选择* (当parameterfield_or_variable不为null时的情况 然后tablefield ='值' 否则1 = 1结束)
或使用parameterfield作为值 (当parameterfield_or_variable不为null时的情况 然后tablefield = parameter_field_or_variable 否则1 = 1结束)
按照问题的答案@KHeaney是对的。
然而,在mysql中描述的tsql / sqlserver中的查询将是这样的:
从tablename中选择* tablefield = @parameterfield - 将输入参数字段与表字段进行比较 或@parameter为空
所以当@parameterfield为null时,它将显示所有结果,否则它将仅限制为输入值。
谢谢
答案 3 :(得分:0)
你可以试试......
select * from tablename
where tablefield = isnull(@parameter, tablefield)
答案 4 :(得分:-1)
我知道T-SQL和MySQL都提供COALESCE
,它返回提供的第一个非NULL值。
SELECT *
FROM tablename
WHERE (COALESCE(`tablefield`, 'value') = 'value')