У меня такая же проблема с этой остановленной темой.
http://www.mail-archive.com/pgsql-sql@postgresql.org/msg28070.html
QUERY-1
SELECT
r.id,
(
SELECT
rl.reminder_header,
rl.reminder_footer
FROM reminder_levels AS rl
WHERE rl.lookup =
(
SELECT MAX(reminder_level_lookup)
FROM reminders
WHERE customer_id = r.customer_id
)
)
FROM reminders AS r
Postgresql ответил, что:
ОШИБКА: подзапрос должен возвращать только один столбец
QUERY-2
SELECT
r.id,
(
SELECT
rl.reminder_header
FROM reminder_levels AS rl
WHERE rl.lookup =
(
SELECT MAX(reminder_level_lookup)
FROM reminders
WHERE customer_id = r.customer_id
)
) AS reminder_header,
(
SELECT
rl.reminder_footer
FROM reminder_levels AS rl
WHERE rl.lookup =
(
SELECT MAX(reminder_level_lookup)
FROM reminders
WHERE customer_id = r.customer_id
)
) AS reminder_footer
FROM reminders AS r
id | reminder_header | reminder_footer
----+-------------------+--------------------
1 | hogehoge | fugafuga
... который работает, но запускает дважды один и тот же блок подвыбора.
Это делает производительность убить.
(но мне нужна эта таблица результатов.)
QUERY-3
SELECT
r.id,
(
SELECT
ROW(rl.reminder_header, rl.reminder_header)
FROM reminder_levels AS rl
WHERE rl.lookup =
(
SELECT MAX(reminder_level_lookup)
FROM reminders
WHERE customer_id = r.customer_id
)
) AS rec
FROM reminders AS r
id | rec
----+----------------------
1 | (hogehoge, fugafuga)
... что работает, но столбец 'rec' является составным.
Как разделить этот 'rec' на Remder_header и Remder_Footer,
как Query-2.
Есть какая-то процедура или техника?
или другое решение?
Спасибо.