Вы должны ссылаться на псевдонимы столбцов в предложении HAVING
.Условия HAVING
выполняются для набора результатов после обработки запроса, в отличие от предложений WHERE
, которые являются частью первоначального выполнения запроса.Благодаря этому HAVING
может работать с псевдонимами столбцов, которые доступны только в наборе результатов.
-- Generate a Table for Every Day in 2008 Year
SELECT DATE_ADD('2008-01-01',
INTERVAL (ones.num + tens.num + hundreds.num) DAY) dt
FROM
(SELECT 0 num UNION ALL
SELECT 1 num UNION ALL
SELECT 2 num UNION ALL
SELECT 3 num UNION ALL
SELECT 4 num UNION ALL
SELECT 5 num UNION ALL
SELECT 6 num UNION ALL
SELECT 7 num UNION ALL
SELECT 8 num UNION ALL
SELECT 9 num) ones
CROSS JOIN
(SELECT 0 num UNION ALL
SELECT 10 num UNION ALL
SELECT 20 num UNION ALL
SELECT 30 num UNION ALL
SELECT 40 num UNION ALL
SELECT 50 num UNION ALL
SELECT 60 num UNION ALL
SELECT 70 num UNION ALL
SELECT 80 num UNION ALL
SELECT 90 num) tens
CROSS JOIN
(SELECT 0 num UNION ALL
SELECT 100 num UNION ALL
SELECT 200 num UNION ALL
SELECT 300 num) hundreds
HAVING YEAR(dt) < 2009
ORDER BY dt;