Documentation Home
MySQL 8.0 参考手册  / 第 13 章 SQL 语句  / 13.2 数据操作语句  / 13.2.11 子查询  /  13.2.10.2 使用子查询进行比较

13.2.10.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);

为了将子查询与标量进行比较,子查询必须返回一个标量。对于子查询与行构造函数的比较,子查询必须是行子查询,它返回具有与行构造函数相同数量的值的行。请参阅 第 13.2.10.5 节,“行子查询”