Votre requête interne est une sous-requête corrélée, mais elle ne peut pas du tout voir table1. Ceci est une restriction sur MySQL - voir Manuel MySQL - D. 3. Restrictions sur les sous-requêtes . À mi-chemin, il indique :
Bien que la sous-requête fasse partie d'une expression LEFT JOIN, elle fait partie de la clause FROM.
Cette reformulation pourrait faire l'affaire pour vous :
SELECT table1.id,
(SELECT COUNT(*)
FROM table2
WHERE table2.lt > table1.lt
AND table2.rt < table1.rt) AS cnt
FROM table1;