首页 > 解决方案 > INSERT的多值宏是什么?

问题描述

INSERT INTO reports (id, date, message) 
   VALUES ($1, $2, $3) 
      RETURNING id

是否可以($1, $2, $3)用更简单的东西代替,比如?or *?这有点令人沮丧 - 输入所有值。

标签: sqlpostgresql

解决方案


你可以使用INSERT INTO SELECT FROM VALUES()语法:

INSERT INTO reports (id, date, message) 
SELECT col1, col2, 'const_value'
FROM (VALUES (...,...),
             (...,...)) s(col1, col2, ...,coln)
RETURNING id;

示例演示:

CREATE TABLE reports(id SERIAL, daten DATE, message TEXT);

INSERT INTO reports ( daten, message) 
SELECT  col2, 'const_value'
FROM (VALUES ('2019-01-01'::date),
             ('2019-01-02'::date)) s(col2)
RETURNING id;

SELECT * FROM reports;

db<>小提琴演示


推荐阅读