Mysql 外部选择联接子查询中的列值?

Mysql 外部选择联接子查询中的列值?,mysql,Mysql,是否可以在联接子查询中使用外部select中的列值 SELECT table1.id, table2.cnt FROM table1 LEFT JOIN (SELECT COUNT(*) as `cnt` FROM table2 WHERE table2.lt > table1.lt and table2.rt < table1.rt) AS table2 ON 1; 您的内部查询是一个相关

是否可以在联接子查询中使用外部select中的列值

SELECT table1.id, table2.cnt
FROM table1 LEFT JOIN (SELECT COUNT(*) as `cnt`
                       FROM table2
                       WHERE table2.lt > table1.lt and table2.rt < table1.rt) AS table2 ON 1;

您的内部查询是一个相关子查询,但它根本看不到表1。这是对MySQL的限制-请参阅。大约走了一半,它说:

不能使用FROM子句中的子查询 可以关联子查询。他们是 物化执行以产生一个 评估前的结果集 外部查询,因此它们不能 按外部查询的每行计算

尽管子查询是左联接表达式的一部分,但它是FROM子句的一部分

这种重新制定可能会对您有所帮助:

SELECT table1.id, 
       (SELECT COUNT(*)
        FROM table2
        WHERE table2.lt > table1.lt
        AND table2.rt < table1.rt) AS cnt
FROM table1;
SELECT table1.id, 
       (SELECT COUNT(*)
        FROM table2
        WHERE table2.lt > table1.lt
        AND table2.rt < table1.rt) AS cnt
FROM table1;