在 WHERE 子句中使用 AND 和 OR 条件得到错误的结果

乔纳森

我有一张这样的表:

+-------------+--------------------------------------+--------------------------------------+---------------+
| BackCheckId |                TaskId                |               EmpGuid                | CompletedDate |
+-------------+--------------------------------------+--------------------------------------+---------------+
|           1 | B92F7079-2011-44D6-B3C4-BD2F7481C97F | 6074CAEA-7A8E-4699-9451-16C2EAF394EF | NULL          |
|           2 | 82AB0C4B-9342-46FA-ACBE-C00B87571BF9 | 6074CAEA-7A8E-4699-9451-16C2EAF394EF | NULL          |
+-------------+--------------------------------------+--------------------------------------+---------------+

要创建的查询:

CREATE TABLE Backchecks(
  BackCheckId int,
  TaskId UNIQUEIDENTIFIER,
  EmpGuid UNIQUEIDENTIFIER,
  CompletedDate DATETIME
);

INSERT INTO Backchecks VALUES
(1, 'B92F7079-2011-44D6-B3C4-BD2F7481C97F', '6074CAEA-7A8E-4699-9451-16C2EAF394EF',NULL),
(2, '82AB0C4B-9342-46FA-ACBE-C00B87571BF9','6074CAEA-7A8E-4699-9451-16C2EAF394EF',NULL)

我想要做的是过滤这些数据,currentEmpGuid所以我声明变量来测试它:

 DECLARE @CurrentEmpGuid UNIQUEIDENTIFIER = 'CC713AC9-ED79-47E3-BA37-47F2D5009BFC'   
DECLARE @FilterEmpKey INT = NULL
    SELECT * FROM Backchecks AS BC 
    WHERE [BC].[CompletedDate] IS NULL
                           AND (@FilterEmpKey IS NULL
                            OR [BC].[EmpGuid] = @CurrentEmpGuid)

所以正如你所看到的,它不应该返回任何结果,因为BC.EmpGuid它不等于表中的任何结果,但由于某种原因我得到了结果。我究竟做错了什么?

大卫布朗 - 微软

BC.EmpGuid 不等于表中的任何结果,但由于某种原因我得到了结果。我究竟做错了什么?

 WHERE [BC].[CompletedDate] IS NULL

这对于行和

(@FilterEmpKey IS NULL
      OR [BC].[EmpGuid] = @CurrentEmpGuid)

由于@FilterEmpKey 为NULL,因此所有行也为TRUE。[BC].[EmpGuid] = @CurrentEmpGuid只如果设置@FilterEmpKey一些非空值进行评估。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在where子句中使用OR条件和Null进行右外部联接-SQL SERVER

T-SQL-在where和子句中使用参数

在 where 子句中使用 Select Min 和 MAx

为什么 ON 子句和 WHERE 子句中的条件使结果不同?

使用 Case When 和 Within 作为 where 子句中的条件

使用MySQL和Java的where子句中的未知列错误

在HAVING和WHERE子句中使用时,窗口函数字段的别名导致“未找到”错误

如何在MySQL where和where子句中的语句中使用正则表达式

在where子句中使用AVG函数和DATEADD进行嵌套查询

如何在 from 和 where 子句中使用相同的 psql 子查询?

Laravel在单个子句中使用多个where和sum

在where和orderby子句中使用两个单列索引

在 where 子句中使用自联接和 group bys 优化查询

如何在SQL的where子句中使用like和substring

我在子查询 MySQL 的 Where 子句中使用 NOT IN 和 IF 是否正确?

如何在 SQL 的 WHERE 子句中使用 IN 运算符和 AND 运算符...?

在WHERE子句中混合使用AND和OR会产生意外结果

在 WHERE 子句和 OR 中使用聚合

在select和from子句中使用子查询的sql错误

where 子句中的 case 语句使用 not like 和 is not null

如何提高在where子句中使用select前20个和一堆isull的查询的性能?

如何从oracle 11g中的日期比较月和日的值并在where子句中使用它?

Sequelize 使用 AND 和 OR 子句构建动态 where 子句条件

Laravel在where子句中用“ and”和“ or”连接

在WHERE子句中合并CASE和BETWEEN

在Where子句中使用Or和Select来比较带有int和lambda表达式的所有条目

如何在 Laravel Eloquent 中使用 GroupBy 和 Where 子句?

如何在 Laravel 中使用 WHERE 子句和 WITH

如果在SQL搜索中使用where和or子句