MySQL的SQL语句 - 数据操作语句(13)- 子查询(8)

关联子查询

关联子查询是一个子查询,它包含对同时出现在外部查询中的表的引用。例如:


1.SELECT * FROM t1
2.  WHERE column1 = ANY (SELECT column1 FROM t2
3.                       WHERE t2.column2 = t1.column2);

请注意,子查询包含对 t1 列的引用,即使子查询的 FROM 子句没有提到表 t1。因此,MySQL 在子查询之外查找,在外部查询中找到 t1。

假设表 t1 包含一行,其中 column1 = 5 并且 column2 = 6;同时,表 t2 包含 column1 = 5 并且 column2 = 7 的行。简单的表达式 ... WHERE column1 = ANY (SELECT column1 FROM t2) 将为 TRUE,但在本例中,子查询中的 WHERE 子句为 FALSE(因为 (5,6) 不等于 (5,7)),因此整个表达式为 FALSE。

作用域规则:MySQL 从内部到外部进行计算。例如:

1.SELECT column1 FROM t1 AS x
2.  WHERE x.column1 = (SELECT column1 FROM t2 AS x
3.    WHERE x.column1 = (SELECT column1 FROM t3
4.      WHERE x.column2 = t3.column1));

在这个语句中,x.column2 必须是表 t2 中的一列,因为 SELECT column1 FROM t2 AS x ... 重命名了 t2。它不是表 t1 中的列,因为 SELECT column1 FROM t1 ... 是一个更远的外部查询。

官方网址:
https://dev.mysql.com/doc/refman/8.0/en/correlated-subqueries.html

MySQL的SQL语句 - 数据操作语句(13)- 子查询(8)

上一篇:MySQL的SQL语句 - 数据操作语句(13)- 子查询(1)


下一篇:MySQL的SQL语句 - 数据操作语句(13)- 子查询(9)