sql - 如何在SQL Server 20008R2中重写IS DISTINCT FROM和IS NOT DISTINCT FROM?

标签 sql sql-server tsql sql-server-2008-r2 ansi-sql

如何在不支持 SQL Server 2008R2 的 SQL 实现中重写包含标准 IS DISTINCT FROMIS NOT DISTINCT FROM 运算符的表达式?

最佳答案

IS DISTINCT FROM 谓词是作为 SQL:1999 的功能 T151 引入的,其可读否定 IS NOT DISTINCT FROM 是作为 SQL 的功能 T152 添加的: 2003年。这些谓词的目的是保证比较两个值的结果是 TrueFalse,而不是 Unknown

这些谓词适用于任何可比较的类型(包括行、数组和多重集),使得精确模拟它们变得相当复杂。然而,SQL Server 不支持大多数类型,因此我们可以通过检查空参数/操作数来取得很大的进展:

  • a 与 b 不同 可以重写为:

    ((a <> b OR a IS NULL OR b IS NULL) AND NOT (a IS NULL AND b IS NULL))
    
  • a 与 b 不同 可以重写为:

    (NOT (a <> b OR a IS NULL OR b IS NULL) OR (a IS NULL AND b IS NULL))
    
<小时/>

您自己的答案不正确,因为它没有考虑到 FALSE OR NULL 的计算结果为未知。例如,NULL IS DISTINCT FROM NULL 的计算结果应为False。同样,1 IS NOT DISTINCT FROM NULL 的计算结果应为False。在这两种情况下,您的表达式都会产生未知

关于sql - 如何在SQL Server 20008R2中重写IS DISTINCT FROM和IS NOT DISTINCT FROM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10416789/

相关文章:

MySQL:我应该如何起草这个数据库?

mysql - 调整MySQL排名查询

sql-server - T-sql - 确定值是否为整数

SQL Server - PK 删除性能不佳

SQL查询返回指定范围外的值

sql - 带有子查询的选项(MAXDOP)?

python - pyparsing,每个,结果名称

SQL Server : how to add new identity column and populate column with ids?

sql-server - # T-SQL sql server 2008 2005 中的 ifdef 类型条件编译

sql - 查找返回多行的计数(*)的平均值