在 json 中使用 SELECT 更新 psql table
UPDATE psql table with SELECT in json
问题
column json
{"size": 120, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Tiger"},
{"size": 200, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Panda"},
{"size": 300, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Lion"}
column name
default_animal
default_animal
default_animal
解决方案
column name
Tiger
Panda
Lion
描述:
在 TableName Animal 中,一列 "json" 包含所有相关数据。 (全部可用 "animal_name")
但是 "name" 列还应该包含相关的 animal_name - 而不是 "default_animal".
解决这个任务最有效的方法是什么?
假设 json 列恰好包含一个 Animal 实例,则以下方法应该有效:
update Animal set name = substring(json position("animal_name" in json) + 15 char_length(json) - 2 )
CREATE TABLE animals (id SERIAL PRIMARY KEY,name TEXT,jsondata JSON);
INSERT INTO animals(name,jsondata) VALUES
('default_animal','{"size": 120, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Tiger"}'::JSON),
('default_animal','{"size": 200, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Panda"}'::JSON),
('default_animal','{"size": 300, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Lion"}'::JSON)
;
UPDATE animals SET name = jsondata->>'animal_name' WHERE name = 'default_animal';
问题
column json
{"size": 120, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Tiger"},
{"size": 200, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Panda"},
{"size": 300, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Lion"}
column name
default_animal
default_animal
default_animal
解决方案
column name
Tiger
Panda
Lion
描述:
在 TableName Animal 中,一列 "json" 包含所有相关数据。 (全部可用 "animal_name") 但是 "name" 列还应该包含相关的 animal_name - 而不是 "default_animal".
解决这个任务最有效的方法是什么?
假设 json 列恰好包含一个 Animal 实例,则以下方法应该有效:
update Animal set name = substring(json position("animal_name" in json) + 15 char_length(json) - 2 )
CREATE TABLE animals (id SERIAL PRIMARY KEY,name TEXT,jsondata JSON);
INSERT INTO animals(name,jsondata) VALUES
('default_animal','{"size": 120, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Tiger"}'::JSON),
('default_animal','{"size": 200, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Panda"}'::JSON),
('default_animal','{"size": 300, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Lion"}'::JSON)
;
UPDATE animals SET name = jsondata->>'animal_name' WHERE name = 'default_animal';