Wednesday, 4 October 2017

sql - Using column alias in WHERE clause of MySQL query produces an error



The query I'm running is as follows, however I'm getting this error:




#1054 - Unknown column 'guaranteed_postcode' in 'IN/ALL/ANY subquery'





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 `guaranteed_postcode` NOT IN #this is where the fake col is being used
(
SELECT `postcode` FROM `postcodes` WHERE `region` IN
(

'australia'
)
)


My question is: why am I unable to use a fake column in the where clause of the same DB query?


Answer



You can only use column aliases in GROUP BY, ORDER BY, or HAVING clauses.





Standard SQL doesn't allow you to
refer to a column alias in a WHERE
clause. This restriction is imposed
because when the WHERE code is
executed, the column value may not yet
be determined.




Copied from MySQL documentation




As pointed in the comments, using HAVING instead may do the work. Make sure to give a read at this WHERE vs HAVING though.


No comments:

Post a Comment

casting - Why wasn't Tobey Maguire in The Amazing Spider-Man? - Movies & TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...