13.2.10.2 使用子查询进行比较

子查询的最常见用法是:

non_subquery_operand comparison_operator (subquery)

其中* comparison_operator *是以下运算符之一:

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

For example:

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

MySQL 还允许这种构造:

non_subquery_operand LIKE (subquery)

一次,子查询的唯一合法位置是在比较的右侧,您可能仍然会发现一些坚持这一要求的旧 DBMS。

这是一个普通形式的子查询比较示例,您无法使用联接进行此操作。它找到 tablet1中的所有行,其中column1的值等于 tablet2中的最大值:

SELECT * FROM t1
  WHERE column1 = (SELECT MAX(column2) FROM t2);

这是另一个示例,再次使用联接是不可能的,因为它涉及到对一个 table 进行聚合。它查找 tablet1中的所有行,其中包含在给定列中出现两次的值:

SELECT * FROM t1 AS t
  WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);

为了将子查询与标量进行比较,子查询必须返回标量。为了将子查询与行构造器进行比较,子查询必须是返回与行构造器具有相同数量值的行的行子查询。参见第 13.2.10.5 节“行子查询”