Предикат match
Предикат позволяет сформулировать условие соответствия строчного значения результату табличного подзапроса. Синтаксис определяется следующим правилом: match_predicate ::= row_value_constructor MATCH [ UNIQUE ] [ SIMPLE | PARTIAL | FULL ] query_expression
Степень первого операнда должна совпадать со степенью таблицы-результата выражения запроса. Типы данных столбцов первого операнда должны быть совместимы с типами соответствующих столбцов табличного подзапроса. Сравнение пар соответствующих значений производится аналогично тому, как это специфицировалось для предиката сравнения.
Пусть x обозначает строку-первый операнд. Тогда:
- Если отсутствует спецификация вида сопоставления или специфицирован тип сопоставления SIMPLE, то:
- если значение некоторого столбца x является неопределенным, то значением условия является true;
- если в x нет неопределенных значений, то:
- если не указано UNIQUE, и в результате выражения запроса существует (возможно, не уникальная) строка s в такая, что x = s, то значением условия является true;
- если указано UNIQUE, и в результате выражения запроса существует уникальная строка s, такая, что x = s, то значением условия является true;
- в противном случае значением условия является false.
- Если в условии присутствует спецификация PARTIAL, то:
- если все значения в x являются неопределенными, то значение условия есть true;
- иначе:
- если не указано UNIQUE, и в результате выражения запроса существует (возможно, не уникальная) строка s, такая, что каждое отличное от неопределенного значение x равно соответствующему значению s, то значение условия есть true;
- если указано UNIQUE, и в результате выражения запроса существует уникальная строка s, такая, что каждое отличное от неопределенного значение x равно соответствующему значению s, то значение условия есть true;
- в противном случае значение условия есть false.
- Если в условии присутствует спецификация FULL, то:
- если все значения в x неопределенные, то значение условия есть true;
- если ни одно значение в x не является неопределенным, то:
- если не указано UNIQUE, и в результате выражения запроса существует (возможно, не уникальная) строка s, такая, что x = s, то значение условия есть true;
- если указано UNIQUE, и в результате выражения запроса существует уникальная строка s, такая, что x = s, то значение условия есть true;
- в противном случае значение условия есть false.
- в противном случае значение условия есть false.
Содержание раздела