如果交叉连接表中没有匹配的字段,我可以引用jsonb表中的数据吗?



我在表中有json数据,我使用它将新数据插入到最终表中,如下所示

CREATE TABLE musicbrainz.acoustid_track (
id int NOT NULL,
created timestamp with time zone DEFAULT current_timestamp,
gid uuid NOT NULL,
new_id varchar(30)
);
CREATE TABLE musicbrainz.acoustid_track_json (
data jsonb
);

……表加载…

json列data在查询中可见,您可以在WHERE子句中引用它,例如:

insert into musicbrainz.acoustid_track 
select id, created, gid, new_id 
from musicbrainz.acoustid_track_json 
cross join jsonb_populate_record(null::musicbrainz.acoustid_track, data);

,这个工作除了acoustid_track_json可以包含新记录或替换记录,这取决于它们是否有更新的字段

新纪录

{"id":67028798,"gid":"18575a2d-bc9c-48c0-b5d7-f815b97421ed","created":"2020-02-03T00:02:11.315629+00:00"}

更新记录
{"id":66277512,"gid":"a31e1ecc-af48-4b8f-ba65-de5187a5c9a7","new_id":65603612,"created":"2019-11-17T12:37:49.81505+00:00","updated":"2020-02-03T13:12:58.043985+00:00"}

但是我似乎不能修改INSERT来引用更新的字段,可能是因为最终表中没有更新的字段,我该如何做到这一点。

json列data在查询中可见,您可以在WHERE子句中引用它,例如:

insert into musicbrainz.acoustid_track 
select id, created, gid, new_id 
from musicbrainz.acoustid_track_json 
cross join jsonb_populate_record(null::musicbrainz.acoustid_track, data)
where data->'updated' is null;

相关内容

最新更新