2013-11-09 4 views
2

Я пытаюсь ссылаться на подзапрос, чтобы использовать значение в case case. Но внутри оператора SELECT я не могу ссылаться на next_creation, поскольку он просто жалуется, что столбец не существует. Я думал об обертывании всего запроса в операторе CASE, но оператор CASE требовал, чтобы я выполнял запрос несколько раз, и это кажется глупым.Подзапрос ссылки postgres в аргументе case

Я также попытался сделать CROSS JOIN с подзапросом, но он жалуется, что не может ссылаться на tg внутри подзапроса. Ошибка ядра: ERROR: неверная ссылка на запись FROM-clause для таблицы «tg». HINT: есть запись для таблицы «tg», но на нее нельзя ссылаться из этой части запроса.

Я также пробовал использовать WITH, но в основном имеет тот же результат, что и CROSS JOIN. Поэтому я даже попытался добавить два предложения WITH, причем первый запрос был таким же в главном запросе OUTER, поэтому второй с может использовать значения .... У меня есть некоторая ошибка.

Есть ли способ ссылаться на подзапрос, как использовать его в переменной для использования, но при этом разрешает подзапрос использовать tg из внешнего запроса?

SELECT *, (
    SELECT 
     tg2.created 
    FROM tocom t 
    LEFT JOIN tocom_g_assoc ON tocom_g_assoc.table_id = t.id AND tocom_g_assoc.tocom_g_id != tg.id 
    LEFT JOIN tocom_g tg2 ON tg2.id = tocom_g_assoc.tocom_g_id 
    WHERE t.id IN (SELECT t_id FROM tocom_g_assoc WHERE tocom_g_assoc.tocom_g_id = tg.id) 
     AND tg2.createdt > tg.created 
     AND tg2.created IS NOT NULL 
    ORDER BY tg2.created ASC 
    LIMIT 1 
) next_creation 

/* 
Here I want to do as CASE statement, but for argument sake, 
a simple next_creation - tg.dissolved_at would do 
*/ 

FROM wp p 
LEFT JOIN tocom_g tg ON tg.id = p.tocom_g_id 
WHERE tg.dissolved_at IS NOT NULL 

ответ

1

Я понял проблему.

Так что я оставил его как select, возвращая подзапрос. Затем я обертываю все это в другом select и делаю запрос запроса from. Тогда я мог бы делать все, что захочу, с возвращаемыми значениями.

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