У меня есть запрос MS Access 2010
SELECT
AirportName,
EarthDistance(51.1480555555556, 0.190277777777778, Lat, Long, "K") AS Distance
FROM Airports;
он работает правильно, возвращая все аэропорты в таблице и их расстояние от лондонского Гатвика.
Я могу добавить предложение where, например
WHERE AirportName = "LaGuardia Airport"
и запрос выполняется правильно. Однако, если я добавлю предложение where, например
WHERE Distance < 5000
Я получаю диалоговое окно с просьбой ввести значение параметра Distance. Как я могу включить этот столбец в предложение where?
@CPerkins Есть ли причина, по которой вы не опубликовали это как ответ?
Возможный дубликат Ms-Access: объединение, создание псевдонима, использование псевдонима
Даже если вы пишете SELECT
часть запроса первой, она выполняется последней. SQL сначала выполняет часть FROM
, затем часть WHERE
для фильтрации записей и, наконец, может SELECT
. Поэтому псевдонимы, используемые в части SELECT
, неизвестны части WHERE
.
Вы можете повторить выражение в части WHERE
SELECT
AirportName,
EarthDistance(51.1480555555556, 0.190277777777778, Lat, Long, "K") AS Distance
FROM Airports
WHERE EarthDistance(51.1480555555556, 0.190277777777778, Lat, Long, "K") < 5000;
или вы можете использовать подзапрос в качестве промежуточного результата
SELECT * FROM
(SELECT
AirportName,
EarthDistance(51.1480555555556, 0.190277777777778, Lat, Long, "K") AS Distance
FROM Airports) X
WHERE X.Distance < 5000;
Забавно, как твой мозг может сообразить что-то за одну ночь. Проснувшись, я понял, что могу повторить выражение в предложении where. Но я не думал об использовании подзапроса. Если вычисление обширно, второй метод может быть предпочтительнее в этой ситуации. Спасибо, что объяснили, почему я не могу использовать имя псевдостолбца.
На псевдонимы столбцов нельзя ссылаться в предложении WHERE. Чтобы решить эту проблему, либо 1) скопируйте все выражение в предложении WHERE, либо 2) сделайте исходный запрос вложенным запросом, в котором затем можно будет сослаться на псевдоним столбца.