Внешнее избранное значение столбца в подзапросе, к которому присоединяются?

Действительно ли возможно использовать значение столбца от внешнего выбора в подзапросе, к которому присоединяются?

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;

Это приводит к "Неизвестному столбцу 'table1.lt' в 'где пункт'".

Вот дамп дб.

CREATE TABLE IF NOT EXISTS `table1` ( `id` int(1) NOT NULL, `lt` int(1) NOT NULL, `rt` int(4) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `table2` ( `id` int(1) NOT NULL, `lt` int(1) NOT NULL, `rt` int(4) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `table1` (`id`, `lt`, `rt`) VALUES (1, 1, 4);

INSERT INTO `table2` (`id`, `lt`, `rt`) VALUES (2, 2, 3);
7
задан Michael DePetrillo 21 April 2010 в 22:59
поделиться

1 ответ

Ваш внутренний запрос является коррелированным подзапросом, но он вообще не может видеть table1. Это ограничение MySQL - см. Руководство по MySQL - D.3. Ограничения на подзапросы . Примерно на полпути ниже указано:

Подзапросы в предложении FROM не могут быть коррелированными подзапросами. Они материализуются (выполняются для создания набора результатов ) перед оценкой внешнего запроса , поэтому их нельзя оценивать для каждой строки внешнего запроса.

Хотя подзапрос является частью выражения LEFT JOIN, он является частью предложения FROM.

Эта переформулировка может помочь вам:

SELECT table1.id, 
       (SELECT COUNT(*)
        FROM table2
        WHERE table2.lt > table1.lt
        AND table2.rt < table1.rt) AS cnt
FROM table1;
15
ответ дан 6 December 2019 в 14:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: