[英]SQL - Insert new record into table based on rows chosen from previous query
[英]How to Insert a New Record Based on Previous Query
我需要更新表(统计信息)中的某些列,如果失败或成功(无论结果是什么),则在表(通知)中创建一条新记录,而无需在第一个和第二个查询之间使用分号 (;)
*第一次查询:*
UPDATE stats SET delivered = delivered + 1 WHERE id = 1
*第二次查询:*
INSERT INTO notifications (text) VALUES ('table stats updated')
(上面的示例不起作用。)
请注意
我已经尝试了一些没有结果的查询,例如
UPDATE stats SET delivered = delivered + 1 WHERE id =
(INSERT INTO notifications (text) VALUES ('table stats updated') RETURNING id)
如果您希望在单个事务语句中执行所有命令,则可以使用多个 WITH 在单个事务中执行多个命令:
WITH query1 AS (
UPDATE stats SET delivered = delivered + 1 WHERE id = 1 RETURNING delivered
),
query2 AS (
INSERT INTO notifications (text)
SELECT delivered FROM query1 RETURNING id
)
SELECT * FROM query1 , query2 ;
规则示例:
CREATE RULE rul_delivered_insertnotification AS ON UPDATE
TO delivered WHERE true
DO (
INSERT INTO notifications (notification) VALUES (NEW.delivered) ;
) ;
CREATE RULE rul_notification_deliverednotification AS ON INSERT
TO notifications WHERE true
DO (
SELECT NEW.notification ;
);
下面的交付更新将 go 插入到通知中,然后通知将检索插入字段通知的 select。
有规则返回的表,第二张图片没有规则:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.