Mysql 嵌套查询中的SQL catch 22?(执行的顺序是什么?)

Mysql 嵌套查询中的SQL catch 22?(执行的顺序是什么?),mysql,relational-division,Mysql,Relational Division,假设我们有一个表vv和一个表r 我们运行以下查询来模拟一个集合划分 我知道这个查询像嵌套的for循环一样运行 问题是:在最深的嵌套查询中,当表vv1的构造尚未完成时,我们如何使用它 我认为'select'子句是最后一个要计算的子句,那么mysql在完成where子句之前如何知道vv1有不同的值(或者它有哪些值),但要完成where子句,它必须先完成它 SELECT DISTINCT vv1.y FROM vv AS vv1 WHERE NOT EXISTS (SELECT r.A

假设我们有一个表vv和一个表r
我们运行以下查询来模拟一个集合划分

我知道这个查询像嵌套的for循环一样运行
问题是:在最深的嵌套查询中,当表vv1的构造尚未完成时,我们如何使用它

我认为'select'子句是最后一个要计算的子句,那么mysql在完成where子句之前如何知道vv1有不同的值(或者它有哪些值),但要完成where子句,它必须先完成它

SELECT DISTINCT vv1.y
FROM   vv AS vv1
WHERE  NOT EXISTS (SELECT r.A
                   FROM   r
                   WHERE  r.A NOT IN (SELECT vv2.x
                                      FROM   vv AS vv2
                                      WHERE  vv2.y = vv1.y)); 


+------+ Table r
| A    |
+------+
|    1 |
|    2 |
|    3 |
+------+

+------+------+ Table vv
| x    | y    |
+------+------+
|    1 | A    |
|    2 | A    |
|    3 | A    |
|    1 | B    |
|    2 | B    |
|    3 | C    |
|    3 | D    |
+------+------+
在这里尝试:

这是一个对于主
vv1
表中的每一行,它运行子查询,将所有
vv.colName
值替换为主表中的相应条目。因此,它不会一次计算所有内部查询,而是对
vv1
的每一行重复计算

另请参见相关子查询,它包括一个示例,其中子查询位于
where
子句中。

这是主
vv1
表中的每一行的一个示例,它运行子查询,并将所有
vv.colName
值替换为主表中的相应条目。因此,它不会一次计算所有内部查询,而是对
vv1
的每一行重复计算

另请参见相关子查询,它包括一个示例,其中子查询位于
where
子句中。

这是主
vv1
表中的每一行的一个示例,它运行子查询,并将所有
vv.colName
值替换为主表中的相应条目。因此,它不会一次计算所有内部查询,而是对
vv1
的每一行重复计算

另请参见相关子查询,它包括一个示例,其中子查询位于
where
子句中。

这是主
vv1
表中的每一行的一个示例,它运行子查询,并将所有
vv.colName
值替换为主表中的相应条目。因此,它不会一次计算所有内部查询,而是对
vv1
的每一行重复计算



另请参见相关子查询,其中包括一个示例,其中子查询位于
where
子句中。

where子句中的所有子查询是针对每行重复的,还是仅针对相关子查询?它仅针对相关子查询执行此操作,相关子查询是指外部查询中的表的查询。。。。但要迭代vv1,它必须知道它有哪些行。。。在任何查询中,
WHERE
子句都是通过迭代表中的所有行来执行的,并根据表中的条件对它们进行测试。好的,因此它将vv1作为一个整体,并在开始时直接对其应用“DISTINCT”。。。然后它一行一行地测试每一行,要么保留,要么丢弃?WHERE子句中的所有子查询是针对每一行重复的,还是仅针对相关子查询?它仅针对相关子查询执行此操作,相关子查询是指外部查询中的表的查询。。。。但要迭代vv1,它必须知道它有哪些行。。。在任何查询中,
WHERE
子句都是通过迭代表中的所有行来执行的,并根据表中的条件对它们进行测试。好的,因此它将vv1作为一个整体,并在开始时直接对其应用“DISTINCT”。。。然后它一行一行地测试每一行,要么保留,要么丢弃?WHERE子句中的所有子查询是针对每一行重复的,还是仅针对相关子查询?它仅针对相关子查询执行此操作,相关子查询是指外部查询中的表的查询。。。。但要迭代vv1,它必须知道它有哪些行。。。在任何查询中,
WHERE
子句都是通过迭代表中的所有行来执行的,并根据表中的条件对它们进行测试。好的,因此它将vv1作为一个整体,并在开始时直接对其应用“DISTINCT”。。。然后它一行一行地测试每一行,要么保留,要么丢弃?WHERE子句中的所有子查询是针对每一行重复的,还是仅针对相关子查询?它仅针对相关子查询执行此操作,相关子查询是指外部查询中的表的查询。。。。但要迭代vv1,它必须知道它有哪些行。。。在任何查询中,
WHERE
子句都是通过迭代表中的所有行来执行的,并根据表中的条件对它们进行测试。好的,因此它将vv1作为一个整体,并在开始时直接对其应用“DISTINCT”。。。然后它逐个测试每一行,要么保留,要么丢弃?