Используя псевдоним столбца в операторе Where MySQL запрос производит ошибку

map является наиболее логичным решением этой проблемы.

let xs = [1, 2, 3];
xs = xs.map(x => 42);
xs // -> [42, 42, 42]

Однако, если есть вероятность, что массив разрежен, вам нужно будет использовать for или, что еще лучше, for .. of.

См .:

182
задан OMG Ponies 25 April 2011 в 16:05
поделиться

2 ответа

Вы можете использовать псевдонимы столбцов только в предложениях GROUP BY, ORDER BY или HAVING.

Стандартный SQL не позволяет вам ссылаться на псевдоним столбца в WHERE пункт. Это ограничение накладывается потому что когда код ГДЕ выполнено, значение столбца может еще не

Скопировано из документации MySQL

Как указано в комментариях, использование HAVING вместо этого может сделать работу. Обязательно прочтите это WHERE vs HAVING .

409
ответ дан 23 November 2019 в 06:03
поделиться

Как заметил Виктор, проблема в псевдониме. Однако этого можно избежать, поместив выражение непосредственно в предложение WHERE x IN y:

SELECT `users`.`first_name`,`users`.`last_name`,`users`.`email`,SUBSTRING(`locations`.`raw`,-6,4) AS `guaranteed_postcode`
FROM `users` LEFT OUTER JOIN `locations`
ON `users`.`id` = `locations`.`user_id`
WHERE SUBSTRING(`locations`.`raw`,-6,4) NOT IN #this is where the fake col is being used
(
 SELECT `postcode` FROM `postcodes` WHERE `region` IN
 (
  'australia'
 )
)

Однако я полагаю, что это очень неэффективно, поскольку подзапрос должен выполняться для каждой строки внешнего запроса.

24
ответ дан 23 November 2019 в 06:03
поделиться
Другие вопросы по тегам:

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