MySQL 8.4 Release Notes
15.2.15.2 使用子查询进行比较
子查询最常见的用法是以下形式:
non_subquery_operand comparison_operator (subquery)
其中,comparison_operator
是这些操作符之一:
= > < >= <= <> != <=>
例如:
... WHERE 'a' = (SELECT column1 FROM t1)
MySQL 也允许使用以下结构:
non_subquery_operand LIKE (subquery)
过去只有一个合法的子查询位置是比较运算符右侧,你可能仍然找到一些老DBMS认为这样。
下面是一个常见形式的子查询比较,无法用join实现。它查找表 t1
中的所有行,其中 column1
值等于表 t2
的最大值:
SELECT * FROM t1
WHERE column1 = (SELECT MAX(column2) FROM t2);
下面是一个又一个例子,仍然无法用join实现,因为它涉及到对其中一张表的聚合。它查找表 t1
中包含某个值两次的所有行:
SELECT * FROM t1 AS t
WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);
对于将子查询与标量比较,子查询必须返回标量。对于将子查询与行构造器比较,子查询必须是行子查询,返回一个与行构造器相同数量的值。见第15.2.15.5节,“行子查询”。