MySQL 8.3 Release Notes
子查询最常见的用途是以下形式:
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 节,“行子查询”。