是否可以在 INSERT INTO 语句中使用查询的 column_name?
Is it posible to use queried column_name in INSERT INTO statement?
查询:
SELECT string_agg(column_name::text, ',')
FROM information_schema.columns
WHERE table_name = 'my_table' and column_name !='id'
returns my_table 中的列列表,除了 'id':
date_of_birth,first_name,last_name,e_mail
我想在定义列名称时在 INSERT INTO 语句中使用此列表。我应该怎么做,因为以下不起作用。
INSERT INTO my_table2 (
SELECT string_agg(column_name::text, ',')
FROM information_schema.columns
WHERE table_name = 'my_table' and column_name !='id'
)
VALUES ('a', 'b', ...);
我更改了 my_table2 和 my_table 中的列数和顺序,因此我必须自动分配名称。
您必须使用动态 SQL,即从第一个查询的结果构造第二个查询。没有办法在单个语句中完成。
对于 psql
的 \gexec
,您可以使用
SELECT format($$INSERT INTO my_table2 (%s) VALUES ('a', 'b', ...)$$,
string_agg(quote_ident(column_name), ', ')
)
FROM information_schema.columns
WHERE table_name = 'my_table'
AND column_name <> 'id' \gexec
查询:
SELECT string_agg(column_name::text, ',')
FROM information_schema.columns
WHERE table_name = 'my_table' and column_name !='id'
returns my_table 中的列列表,除了 'id':
date_of_birth,first_name,last_name,e_mail
我想在定义列名称时在 INSERT INTO 语句中使用此列表。我应该怎么做,因为以下不起作用。
INSERT INTO my_table2 (
SELECT string_agg(column_name::text, ',')
FROM information_schema.columns
WHERE table_name = 'my_table' and column_name !='id'
)
VALUES ('a', 'b', ...);
我更改了 my_table2 和 my_table 中的列数和顺序,因此我必须自动分配名称。
您必须使用动态 SQL,即从第一个查询的结果构造第二个查询。没有办法在单个语句中完成。
对于 psql
的 \gexec
,您可以使用
SELECT format($$INSERT INTO my_table2 (%s) VALUES ('a', 'b', ...)$$,
string_agg(quote_ident(column_name), ', ')
)
FROM information_schema.columns
WHERE table_name = 'my_table'
AND column_name <> 'id' \gexec