独特的定语
一个独特的谓词将一个值与另一个值或一组值与另一组值进行比较。
表达式和行值表达式不能是数组表达式。
在“distinct”运算符后指定的行值表达式返回的元素数量必须与在“distinct”运算符前指定的行值表达式返回的元素数量一致。 相应列的数据类型或行值表达式的表达式必须兼容。 当对谓词进行评估时,左侧每个表达式的值与右侧对应表达式的值进行比较。 谓词的结果取决于谓词的形式。
当谓词为 IS DISTINCT,如果一对对应的值表达式至少有一个比较结果为假,则谓词的结果为真。 否则,谓词的结果为假。 结果可想而知。
当谓词 IS NOT DISTINCT FROM,如果所有对应值表达式的结果都为真(空值被视为等于空值),则谓词的结果为真。 否则,谓词为假。 结果可想而知。
“独特”这一限定词不能用于以下语境:
- 全外连接的连接条件 ON 全外连接的连接条件
- 检查约束
- 一个量化的谓词
下列DISTINCT谓词在逻辑上等同于相应的搜索条件:
| 独特的定语 | 搜索条件 |
|---|---|
|
|
|
|
示例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 | 空值 | 错 |
| 空值 | 空值 | 是 |
