文档主页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  使用子查询进行比较

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 中发现这种限制。

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