Spec-Zone.ru › MySQL 5.7

13.2.10.2 Сравнения с использованием подзапросов

Наиболее распространённое использование подзапроса — в форме:

non_subquery_operand comparison_operator (subquery)

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

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

Например:

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

MySQL также допускает такую конструкцию:

non_subquery_operand LIKE (subquery)

В своё время единственным допустимым местом для подзапроса была правая часть сравнения, и вы можете всё ещё встретить некоторые старые СУБД, которые настаивают на этом.

Вот пример сравнения с подзапросом в общепринятой форме, которое нельзя сделать с помощью соединения. Он находит все строки в таблице 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, «Строковые подзапросы».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/comparisons-using-subqueries.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API