相关子查询
相关子查询是包含要也出现在外部查询表的基准的子查询。例如:
SELECT *FROM t1WHERE column1 =ANY (SELECT column1FROM t2WHERE t2.column2 = t1.column2);
请注意t1,即使子查询的FROM子句未提及table ,子查询仍包含对的列的引用t1。因此,MySQL在子查询之外查找,并t1在外部查询中查找。
假设该表t1包含一行where 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从内到外进行评估。例如:
SELECT column1FROM t1AS xWHERE x.column1 = (SELECT column1FROM t2AS xWHERE x.column1 = (SELECT column1FROM t3WHERE x.column2 = t3.column1));
在此语句中,x.column2必须是表中的一列,t2因为SELECT column1 FROM t2 AS x ...重命名t2。它不是表中的列,t1因为它SELECT column1 FROM t1 ...是一个外部查询,它更远。
