单个插入中有条件地覆盖默认PK序列

时间:2015-10-19 17:39:23

标签: postgresql sql-insert

假设我将表customer2定义为:

CREATE TABLE customer2(
  customer_id bigint NOT NULL DEFAULT nextval(('customer.customer_identity'::text)::regclass),
  customer_name character varying
CONSTRAINT customer2_pkey PRIMARY KEY (customer_id)
)

我有另一个名为customer1的表,具有相同的表定义。在插入customer2之前,我想检查customer1以查看同一customer_name是否存在customer_id,如果是,则使用它。我的insert语句看起来类似于:

INSERT INTO customer2(
  customer_id,
  customer_name)
SELECT customer_id, --null if not found in customer1 table
       nc.customer_name
  FROM new_customers nc
  LEFT OUTER JOIN customer1 c1 on c1.customer_name = nc.customer_name

运行此插入时,我在列" customer_id"中得到错误" null值违反了非空约束"。当我没有要插入customer_id时,有没有办法使用默认序列?显然,我可以编写两个不同的插入语句,但唉,这是一个重要的,看似不必要的代码重复,这会影响我的编程性质。

1 个答案:

答案 0 :(得分:1)

你不能只使用Col1,Col2,Col6,Col9,Col10 data1,data2,data6,data9,data10 dataA,dataB,dataF,dataI,dataJ coalesce来使用序列为null。

nextval