sql - Where 子句以相同的逻辑返回不同的结果
问题描述
我是 sql 新手,我有这样的 where 子句:
第一个查询(生产)
WHERE [D].[IsLocked] = 0
AND ((@FilterEmpKey IS NULL
AND [TA].[EmpKey] = @CurrentEmpKey)
OR (ISNULL([TA].[ModifiedAssignedBy] , [TA].[AssignatedBy]) = @FilterEmpKey
AND [TA].[EmpKey] = @CurrentEmpKey))
第二次查询(测试)
WHERE [D].[IsLocked] = 0
AND [TA].EmpKey = @CurrentEmpKey
OR (ISNULL([TA].[ModifiedAssignedBy] , [TA].[AssignatedBy]) = @FilterEmpKey
AND [TA].[EmpKey] = @CurrentEmpKey)
我想知道第一个和第二个查询有什么区别,因为结果不一样,我不知道为什么?问候
注意:我想要的结果是获取测试查询的值
解决方案
这是一个例子。当@FilterEmpKey IS NOT NULL 并且@CurrentEmpKey 匹配TA.EmpKey 时,查询返回不同的结果集。
CREATE TABLE TA (EmpKey VARCHAR(25), ModifiedAssignedBy VARCHAR(25), AssignatedBy VARCHAR(25))
INSERT INTO TA VALUES ('test', 'test_mod', 'test_assign')
DECLARE @FilterEmpKey VARCHAR(25) = 'banana'
DECLARE @CurrentEmpKey VARCHAR(25) = 'test'
-- Returns nothing; both conditions are false.
SELECT * FROM TA
WHERE ((@FilterEmpKey IS NULL
AND [TA].[EmpKey] = @CurrentEmpKey)
OR (ISNULL([TA].[ModifiedAssignedBy] , [TA].[AssignatedBy]) = @FilterEmpKey
AND [TA].[EmpKey] = @CurrentEmpKey))
-- Returns a row; first condition is true.
SELECT * FROM TA
WHERE [TA].EmpKey = @CurrentEmpKey
OR (ISNULL([TA].[ModifiedAssignedBy] , [TA].[AssignatedBy]) = @FilterEmpKey
AND [TA].[EmpKey] = @CurrentEmpKey)
推荐阅读
- html - 我怎样才能使这部分全屏高度?
- javascript - 如何将在 html 页面上编辑的内容保存到 Google 工作表
- angular - Angular CLI 命令中的 i 是什么:ng gi student?
- android - Diff util 未在回收站视图中更新项目 UI
- excel - 循环遍历一些工作表以压缩 vba 代码的有效方法是什么?
- ansible - 从 Ansible 中的变量中提取子字符串
- swagger - 无论如何在与实际 API 不同的服务器上设置 Swagger 吗?
- python - 触发 Django 线程作为后台任务
- javascript - 使用coinflip命令javascript的discordbot代码错误
- powershell - 将函数指针从 PowerShell 传递到 DLL