Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Comparisons Using Subqueries

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节,“行子查询”