我有下表:
create table table1
(
id serial,
workdate date,
col1 varchar,
col2 varchar,
col3 varchar
);
我已插入以下数据:
insert into table1(id, workdate) values (DEFAULT, '01/12/2023');
现在我更新了它,查看序列的第一个空列。例如:我运行以下更新:
update table1 set col1 = '12' where id = 1; /* there's no relation between col1 and any other data on this query. '12' is just a random value */
现在我已经更新了一次,我想创建一个查询来查找第一个 NULL 列,然后更新它。如果 col1 为 NULL,则 12 将被放在那里。否则,如果 col1 有一些非 NULL 值,我想更新 col2 中的 12 (依此类推......)
我怎样才能在 PostgreSQL 中做到这一点? (使用 Postgre 9.6)
我尝试使用 COALESCE 来做到这一点,但是我得到了我正在寻找的完全相反的结果。现在缺乏想法(除了在我的代码上使用大量 CASE WHEN - 我试图不这样做。想做一些更优雅的事情)
尝试以下查询,使用指定的
NULL
更新一行中的第一个 value ('12')
列,使用顺序 CASE
语句按顺序检查每一列。
UPDATE table1
SET
col1 = CASE
WHEN col1 IS NULL THEN '12'
ELSE col1
END,
col2 = CASE
WHEN col1 IS NOT NULL AND col2 IS NULL THEN '12'
ELSE col2
END,
col3 = CASE
WHEN col1 IS NOT NULL AND col2 IS NOT NULL AND col3 IS NULL THEN '12'
ELSE col3
END
WHERE id = 1;