如何将PostgreSQL的INSERT与SELECT语句合并为单条SQL语句?
把INSERT和全量SELECT合并成单条SQL的方法
当然可以实现,不同数据库有不同的处理方式,下面是几种主流数据库的具体方案:
MySQL/MariaDB
最直接的方式就是把两条语句用分号隔开,只要你的客户端允许执行多语句就行:
INSERT INTO testing_sql(name, age) VALUES ('Jim', '28'); SELECT * FROM testing_sql;
如果场景不支持多语句,那就写个存储过程封装逻辑:
DELIMITER // CREATE PROCEDURE InsertThenGetAll() BEGIN INSERT INTO testing_sql(name, age) VALUES ('Jim', '28'); SELECT * FROM testing_sql; END // DELIMITER ; -- 调用时执行这条 CALL InsertThenGetAll();
PostgreSQL
用WITH子句先执行插入,接着直接查询全表:
WITH inserted_row AS ( INSERT INTO testing_sql(name, age) VALUES ('Jim', '28') RETURNING * -- 这行可选,仅返回刚插入的记录,不影响主查询 ) SELECT * FROM testing_sql;
SQL Server
同样支持分号分隔的多语句:
INSERT INTO testing_sql(name, age) VALUES ('Jim', '28'); SELECT * FROM testing_sql;
要是想用单语句块实现,也可以用临时表过渡:
DECLARE @temp TABLE (dummy_col INT); INSERT INTO testing_sql(name, age) OUTPUT inserted.id INTO @temp VALUES ('Jim', '28'); SELECT * FROM testing_sql;
简单来说,大多数场景下,直接把两条语句用分号分隔就能满足需求;如果严格要求单语句结构,就用对应数据库的特定语法来封装。
内容的提问来源于stack exchange,提问作者Walker
相关产品推荐
相关产品推荐

