Mysql 嵌套查询中的SQL catch 22?(执行的顺序是什么?)
假设我们有一个表vv和一个表rMysql 嵌套查询中的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
我们运行以下查询来模拟一个集合划分 我知道这个查询像嵌套的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”。。。然后它逐个测试每一行,要么保留,要么丢弃?