У меня есть запрос SQL
SELECT targetDate, anEvent
FROM myTable mt
JOIN lookupTable lookup
ON lookup.startDate < mt.targetDate AND endDate > mt.targetDate
Когда я пытаюсь превратить его в подзапрос
SELECT targetDate, sub.anEvent
FROM myTable mt
JOIN
(
SELECT anEvent
FROM lookupTable lookup
WHERE lookup.startDate < mt.targetDate AND endDate > mt.targetDate
) sub
Я получаю сообщение об ошибке «mt is not defined» .
Мне нужно сделать это подзапросом, как это исправить?
Это должно быть так, чтобы попытаться увидеть, есть ли какой-то способ сократить область действия псевдонима. Отредактировал.
Похоже, что ваша ссылка на таблицу mt
в подзапросе пытается сделать ее коррелированным подзапросом. Я не верю, что это можно сделать в производной таблице, корреляция обычно помещается в предложение WHERE.
Такого же результата вы можете достичь, выполнив следующие действия.
SELECT T.targetDate, T.anEvent
FROM
(
SELECT targetDate, anEvent
FROM myTable mt
JOIN lookupTable lookup
ON lookup.startDate < mt.targetDate AND endDate > mt.targetDate
) T
надеюсь, что это сработает.
Зачем делать подзапрос? Ваш первый запрос был идеальным.
SELECT targetDate, anEvent
FROM myTable mt
JOIN lookupTable lookup
ON lookup.startDate < mt.targetDate AND endDate > mt.targetDate
Мы пытаемся придерживаться стандарта кодирования.
Подвыбор - не всегда хорошая идея. Какого стандарта кодирования вы хотите придерживаться?
Я понимаю, что он может быть не таким производительным, но мы пытаемся логически сгруппировать вещи, чтобы их было легче читать тем, кто не привык смотреть на SQL. Это только часть гораздо большего запроса.
Стандарты кодирования должны обеспечивать соблюдение передовых практик и эффективности программирования. Если вы хотите, чтобы ваш код было легче читать, подумайте о форматировании и блоках комментариев, если они являются частью сценария.
похоже, что псевдоним
mt
дляmyTable
отсутствует в приведенном ниже запросе