SQL WHERE 子句 - 条件过滤器
SQL WHERE clause - Conditional filters
我有一个查询,我想使用以下逻辑(完全知道它不会像写的那样工作):
select *
From orders
Where if Value1 != 'TEST'
(Value1 = @1)
Else if Value2 != 'TEST'
(Value2 = @2)
Else 1=2
我认为我不能使用 Case...When
或 iif
,因为根据条件结果过滤查询的值会发生变化。有什么想法吗?
你的逻辑等同于:
Select *
From orders
Where (Value1 <> 'TEST' and Value1 = @1) OR
(Value1 = 'TEST' and Value2 <> 'TEST' and Value2 = @2)
这不是 100% 等效的。如果 Value1
可能是 NULL
,那么逻辑应该考虑到这一点:
Select o.*
From orders o
Where (Value1 <> 'TEST' and Value1 = @1) OR
(COALESCE(Value1, 'TEST') = 'Test' and Value2 <> 'TEST' and Value2 = @2)
我有一个查询,我想使用以下逻辑(完全知道它不会像写的那样工作):
select *
From orders
Where if Value1 != 'TEST'
(Value1 = @1)
Else if Value2 != 'TEST'
(Value2 = @2)
Else 1=2
我认为我不能使用 Case...When
或 iif
,因为根据条件结果过滤查询的值会发生变化。有什么想法吗?
你的逻辑等同于:
Select *
From orders
Where (Value1 <> 'TEST' and Value1 = @1) OR
(Value1 = 'TEST' and Value2 <> 'TEST' and Value2 = @2)
这不是 100% 等效的。如果 Value1
可能是 NULL
,那么逻辑应该考虑到这一点:
Select o.*
From orders o
Where (Value1 <> 'TEST' and Value1 = @1) OR
(COALESCE(Value1, 'TEST') = 'Test' and Value2 <> 'TEST' and Value2 = @2)