独特的定语

一个独特的谓词将一个值与另一个值或一组值与另一组值进行比较。

阅读语法图跳过可视化语法图表达式ISNOTDISTINCT FROM表达式行值表达式ISNOTDISTINCT FROM行值表达式

表达式行值表达式不能是数组表达式。

在“distinct”运算符后指定的行值表达式返回的元素数量必须与在“distinct”运算符前指定的行值表达式返回的元素数量一致。 相应列的数据类型或行值表达式的表达式必须兼容。 当对谓词进行评估时,左侧每个表达式的值与右侧对应表达式的值进行比较。 谓词的结果取决于谓词的形式。

当谓词为 IS DISTINCT,如果一对对应的值表达式至少有一个比较结果为假,则谓词的结果为真。 否则,谓词的结果为假。 结果可想而知。

当谓词 IS NOT DISTINCT FROM,如果所有对应值表达式的结果都为真(空值被视为等于空值),则谓词的结果为真。 否则,谓词为假。 结果可想而知。

“独特”这一限定词不能用于以下语境:

  • 全外连接的连接条件 ON 全外连接的连接条件
  • 检查约束
  • 一个量化的谓词
下列DISTINCT谓词在逻辑上等同于相应的搜索条件:
表 1. DISTINCT谓词和逻辑上等价的搜索条件
独特的定语 搜索条件
   value 1 IS NOT DISTINCT FROM value2
(value1 IS NOT NULL 
 AND value2 IS NOT NULL 
 AND value1 = value 2)
OR
(value1 IS NULL 
 AND value2 IS NULL)
value 1 IS DISTINCT FROM value2
NOT (value1 IS NOT DISTINCT FROM value2)
示例1: 假设 T1 是一个有三行的单列表格。 列 C1 具有以下值:1、2和空值。 请考虑下列查询:
  SELECT * FROM T1
     WHERE C1 IS DISTINCT FROM :HV; 
下表显示了 C1 和宿主变量的不同值时谓词的值。
价值 C1 混合动力车的价值 谓词的结果
1 2
2 2
空值 2
1 空值
2 空值
空值 空值
例2: 假设第一个例子的表相同,但查询中谓词的否定形式如下:
  SELECT * FROM T1
     WHERE C1 IS NOT DISTINCT FROM :HV; 
下表显示了 C1 和宿主变量的不同值时谓词的值。
价值 C1 混合动力车的价值 谓词的结果
1 2
2 2
空值 2
1 空值
2 空值
空值 空值