我正在为模拟航空公司预订数据库编写预订程序,我真正想做的是这样的事情:
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不支持IF
语句而不加载PL / pgSQL扩展。我想知道是否有办法做一些相当于这个或者在这一步中是否需要进行一些用户交互?
答案 0 :(得分:60)
这个特定的命令可以这样做:
insert into LeadCustomer (Firstname, Surname, BillingAddress, email)
select
'John', 'Smith',
'6 Brewery close, Buxton, Norfolk', 'cmp.testing@example.com'
where not exists (
select * from leadcustomer where firstname = 'John' and surname = 'Smith'
);
它将插入select语句的结果,如果该客户不存在,select
将只返回一行。
答案 1 :(得分:2)
包含9.5版本的pgsql upsert
以下答案已不再适用。 Postgres 9.5在几年后发布,提供了更好的解决方案。
Postgres在没有添加新功能的情况下没有“upsert”功能 您需要做的是运行select查询并查看是否有匹配的行。如果你这样做,那么插入它。
我知道你完全不想要一个upsert,但它几乎是一样的。