Spec-Zone .ru
спецификации, руководства, описания, API

13.2.10.2. Сравнения Используя Подзапросы

Наиболее популярный способ использования подзапроса находится в форме:

non_subquery_operand comparison_operator (subquery)

Где comparison_operator один из этих операторов:

=  >  <  >=  <=  <>  !=  <=>

Например:

... WHERE 'a' = (SELECT column1 FROM t1)

MySQL также разрешает эту конструкцию:

non_subquery_operand LIKE (subquery)

Когда-то единственное юридическое место для подзапроса было на правой стороне сравнения, и Вы могли бы все еще найти некоторые старые DBMSs, которые настаивают на этом.

Вот пример сравнения подзапроса стандартной формы, которое невозможно сделать с соединением. Это находит все строки в таблице t1 для которого column1 значение равно максимальному значению в таблице t2:

SELECT * FROM t1  WHERE column1 = (SELECT MAX(column2) FROM t2);

Вот другой пример, который снова невозможен с соединением, потому что он включает агрегацию для одной из таблиц. Это находит все строки в таблице t1 содержа значение, которое происходит дважды в данном столбце:

SELECT * FROM t1 AS t  WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);

Для сравнения подзапроса к скаляру подзапрос должен возвратить скаляр. Для сравнения подзапроса конструктору строки подзапрос должен быть подзапросом строки, который возвращает строку с тем же самым числом значений как конструктор строки. См. Раздел 13.2.10.5, "Подзапросы Строки".