我不清楚 where 子句中这个 case 语句发生了什么。设置:
CREATE TABLE [dbo].[Cars](
[Car] [varchar](20) NULL,
[Fast] [varchar](10) NULL
) ON [PRIMARY]
INSERT [dbo].[Cars] ([Car], [Fast]) VALUES (N'Ford', N'No')
INSERT [dbo].[Cars] ([Car], [Fast]) VALUES (N'Holden', N'Yes')
INSERT [dbo].[Cars] ([Car], [Fast]) VALUES (N'Mazda', N'Not Really')
INSERT [dbo].[Cars] ([Car], [Fast]) VALUES (N'Toyota', N'Yes')
和查询:
declare @Include_List varchar(100) = (select 'Get fast cars, Get slow cars')
SELECT Car,Fast
FROM Cars
where case
when Fast = 'Yes' and CHARINDEX('Get fast cars',@Include_List) > 0 then 1
when Fast = 'No' and CHARINDEX('Get slow cars',@Include_List) > 0 then 1
else 0
end = 1
我期待第一个when
表达式匹配快车,然后退出 case 语句。然而,第二个when
表达式也经过测试并与慢车匹配。结果集包含快车和慢车。
不应该只返回第一次相等检查的结果吗?