2013-10-12 5 views
0

У меня есть сохраненная функция под названием adjust_status и таблица users с колонкой status.Временная колонка "не существует?"

select 
    adjust_status(status) as adjusted_status 
from users 
    where adjusted_status > 0; 

В нем говорится, что adjusted_status не существует. Зачем? И как я могу это исправить?

ответ

4

Вы не можете ссылаться на псевдоним на том же уровне, где он определен. Вы должны использовать производную таблицу:

select * 
from (
    select adjust_status(status) as adjusted_status 
    from users 
) t 
where adjusted_status > 0; 

Это может быть продлен, конечно:

select * 
from (
    select adjust_status(u.status) as adjusted_status, 
     u.some_other_column, 
     f.yet_another_column 
    from users u 
    join foo f on f.some_id = u.some_other_id 
) t 
where adjusted_status > 0; 
+0

Ок, предположим, что я не хочу, чтобы выбрать больше, чем просто скорректированной статус? Что делать, если я также хочу, чтобы каждый столбец был у пользователей? А что, если пользователи просто присоединяются? –

+0

@Brandon: затем просто добавьте дополнительные столбцы во внутренний выбор. То же самое касается соединений. –

Смежные вопросы