我刚刚将Postres的版本从9.1更新到了12,现在我从特定查询中收到此错误消息:
scoring
产生该错误的实际查询是其中很大一部分的一部分,但实际的行是:
$approvalLink = sprintf('<a href="%s/Request/Approval/code/%s">Approve</a>', $url, $Code);
第一次看到此消息,我不知道这意味着什么。如何SQLSTATE[0A000]: Feature not supported: 7 ERROR: set-returning functions are not allowed in CASE LINE 17: generate_series(start_date, ^ HINT: You might be able to move the set-returning function into a LATERAL FROM item.
作为错误消息提示?
答案 0 :(得分:0)
这就是所谓的“横向联接”-基本上,它是与当前查询“交叉联接”的计算列。
像这样使用它:
SELECT MY_LATERAL,
-- etc other columns
FROM YOUR_TABLE
LATERAL (CASE
WHEN num_payments > 1 THEN
generate_series(start_date, start_date + ((payment_interval*(num_payments-1)) || payment_interval2)::interval, (payment_interval::text || payment_interval2)::interval)::date
ELSE start_date
END) AS MY_LATERAL
文档https://www.postgresql.org/docs/9.4/queries-table-expressions.html第7.2.1.5节
答案 1 :(得分:0)
由于某种原因,我无法使用LATERAL
,因为它只是生成了其他语法错误消息(从长远来看,我将不得不对此进行处理)。因此,我只需选择所有值,然后在查询中将CASE
移至更高位置,以使generate_series()
不在case语句中,就可以解决我的问题:
SELECT other_columns,
CASE
WHEN num_payments > 1 THEN date_2 ELSE date_1
END AS start_date
FROM(
SELECT other_columns,
start_date AS date_1,
generate_series(start_date, start_date + ((payment_interval*(num_payments-1)) || payment_interval2)::interval, (payment_interval::text || payment_interval2)::interval)::date AS date_2
FROM(
-- INNER QUERY
)a
)b