Conditional INSERT INTO statement in postgres
我正在为模拟航空公司预订数据库编写预订程序,我真正想做的是这样的:
1 2 3 4 5 6 | IF EXISTS (SELECT * FROM LeadCustomer WHERE FirstName = 'John' AND Surname = 'Smith') THEN INSERT INTO LeadCustomer (Firstname, Surname, BillingAddress, email) VALUES ('John', 'Smith', '6 Brewery close, Buxton, Norfolk', cmp.testing@example.com'); |
但Postgres不支持
那个特定的命令可以像这样完成:
1 2 3 4 5 6 7 | INSERT INTO LeadCustomer (Firstname, Surname, BillingAddress, email) SELECT 'John', 'Smith', '6 Brewery close, Buxton, Norfolk', '[email protected]' WHERE NOT EXISTS ( SELECT * FROM leadcustomer WHERE firstname = 'John' AND surname = 'Smith' ); |
它将插入select语句的结果,如果该客户不存在,
As of 9.5 version of pgsql upsert is included, using INSERT ... ON CONFLICT DO UPDATE ...
以下答案已不再适用。 Postgres 9.5在几年后发布,提供了更好的解决方案。
Postgres没有添加新功能就没有"upsert"功能。
您需要做的是运行select查询并查看是否有匹配的行。 如果你这样做,那么插入它。
我知道你并不想要一个完美的upsert,但它几乎是一样的。