给出类似的东西:
SELECT
a,
b,
fn(c),
fn2(a, d),
d
FROM table_name
...
是否可以将这些字段分解为可以在RETURNING
语句中重用的内容,如:
INSERT INTO table_name
VALUES ...
RETURNING <here>
我知道SELECT语句可以被分解到视图中,但似乎我不能在RETURNING
中重用该视图。
在某些情况下,理论上可以插入视图,但如果您有fn
和fn2
,则似乎不可能。
我正在使用.NET Core上的Dapper,我正在尝试从表中返回一个特定的字段子集,以返回始终相同的对象。
我可以在C#中创建一个单独的函数,它将使SELECT
包含这些特定字段并重用该函数,但我只是想知道这是否可以使用SQL。
答案 0 :(得分:1)
你可以这样做:
with i as (
INSERT INTO table_name
VALUES ...
RETURNING *
)
SELECT a, b, fn(c), fn2(a, d), d
FROM table_name;
也就是说,您不必在SELECT
中使用CTE的结果。这看起来很奇怪。为什么不直接执行两个语句?
或者,也许你打算这样:
with i as (
INSERT INTO table_name
VALUES ...
RETURNING *
)
SELECT a, b, fn(c), fn2(a, d), d
FROM i;
答案 1 :(得分:0)
不确定这是不是你的意思
create function fn (param integer) returns integer
language sql as
'select 1000 * param;';
create table a (
id serial not null,
data character varying(256) not null
);
insert into a (data)
select 'test'
returning id, fn(id);