Введение в стандарты языка баз данных SQL

       

Предикат match


Предикат позволяет сформулировать условие соответствия строчного значения результату табличного подзапроса. Синтаксис определяется следующим правилом:

<match predicate> ::= <row value constructor> MATCH [ UNIQUE ] [ PARTIAL FULL ] <table subquery>

Пояснения:

  • Степень первого операнда должна совпадать со степенью табличного подзапроса.
  • Типы данных первого операнда должны быть совместимы с типами соответствующих столбцов табличного подзапроса.
  • Сравнение пар соответствующих значений производится аналогично тому, как это специфицировалось для предиката сравнения.
  • Пусть R обозначает строку-первый операнд.
  • Если не указано ни PARTIAL, ни FULL, то

      (a) если некоторое значение в R является неопределенным, то значением условия является true;

      (b) если в R нет неопределенных значений, то

      (i) если не указано UNIQUE и существует (возможно, не уникальная) строка RTi в результате табличного подзапроса такая, что R = RTi, то значение условия есть true;

      (ii) если указано UNIQUE и в результате табличного подзапроса существует уникальная строка RTi такая, что R = RTi, то значение условия есть true;

      (iii) в противном случае значением условия является false.

  • Если указано PARTIAL, то

      (a) если все значения в R неопределенные, то значение условия есть true;

      (b) иначе:

      (i) если не указано UNIQUE и в результате табличного подзапроса существует (возможно, не уникальная) строка RTi такая, что каждое отличное от неопределенного значение R равно соответствующему значению RTi, то значение условия есть true;

      (ii) если указано UNIQUE и в табличном подзапросе существует уникальная строка RTi такая, что каждое отличное от неопределенного значение R равно соответствующему значению RTi, то значение условия есть true;

      (iii) в противном случае значение условия есть false.

  • Если указано FULL, то

      (a) если все значения в R неопределенные, то значение условия есть true.

      (b) если в R нет неопределенных значений, то

      (i) если не указано UNIQUE и в результате табличного подзапроса существует (возможно, не уникальная) строка RTi такая, что R = RTi, то значение условия есть true;

      (ii) если указано UNIQUE и в результате табличного подзапроса существует уникальная строка RTi такая, что R = RTi, то значение условия есть true;

      (iii) в противном случае значение условия есть false;

      (c) в противном случае значение условия есть false.



  • Содержание раздела