Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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

15.2.15.2 使用子查询的比较

子查询最常见的用途是以下形式:

non_subquery_operand comparison_operator (subquery)

其中 比较运算符 是以下运算符之一:

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

例如:

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

MySQL 也允许以下构造:

non_subquery_operand LIKE (subquery)

曾经,子查询只能出现在比较的右侧,现在您可能仍然会找到一些老的 DBMS,它们仍然坚持这种做法。

以下是一个常见的子查询比较示例,无法使用连接实现。它找到表 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);

对于子查询与标量的比较,子查询必须返回一个标量。对于子查询与行构造的比较,子查询必须是一个返回与行构造相同数量值的行子查询。请参阅 第 15.2.15.5 节,“行子查询”