通过一些字符串操作,用来自另一个 table 的数据更新一个 table 中的数据
Update data in one table with data from another table with some string manipulation
我有两个数据库table如下:
content_definition
(
content_definition_id bigint ,
content_title character varying(100) NOT NULL,
content_desc character varying(500),
content_kwd character varying(300),
content_view_url character varying(100),
content_edit_url character varying(300),
content_media_url character varying(300),
content_type character varying(50),
site_id integer
)
bl_address
(
address_id bigserial NOT NULL,
entity character varying(30),
entity_id integer,
address1 character varying(150),
address2 character varying(50),
city character varying(50),
state character varying(50),
zip character varying(15),
country character varying(50),
)
我正在尝试创建一个 SQL 语句来更新第一个 table 中的 content_view_url
列,方法是在第二个 state
中附加其中的数据 table。第一个 table 中的 content_id
应该等于第二个 table 中的 entity_id
。另外,我需要在追加的两个字符串之间包含 -
并且还需要用 -
替换 state 列中的所有空格并将其转换为小写,因为数据是 URL。
我尝试使用 concat
函数创建示例查询,但它对我不起作用:
update content_definition
set content_view_url = CONCAT(select content_view_url
from content_definition, '-test')
where content_definition_id = 770764;
我收到错误:
ERROR: syntax error at or near "select"
SQL state: 42601
Character: 64
有什么办法可以实现吗?
在 Postgres 中,您可以在 UPDATE
中使用 FROM
子句。根据您问题中的查询:
update content_definition cd
set content_view_url = cd2.content_view_url || '-test'
from content_definition cd2
where cd2.content_definition_id = 770764;
基于问题:
update content_definition cd
set content_view_url = content_view_url || a.state
from bl_address a
where cd.content_id = a.entity_id;
或根据您的评论:
set content_view_url = content_view_url || '-' || replace(a.state, ' ', '-')
多亏了这些建议,我正在寻找的查询是:
update content_definition cd
set content_view_url = content_view_url || '-' || lower(replace(a.state, ' ' , '-'))
from bl_address a
where cd.content_id = a.entity_id and cd.content_type = 'business.location' and cd.site_id = 35;
我有两个数据库table如下:
content_definition
(
content_definition_id bigint ,
content_title character varying(100) NOT NULL,
content_desc character varying(500),
content_kwd character varying(300),
content_view_url character varying(100),
content_edit_url character varying(300),
content_media_url character varying(300),
content_type character varying(50),
site_id integer
)
bl_address
(
address_id bigserial NOT NULL,
entity character varying(30),
entity_id integer,
address1 character varying(150),
address2 character varying(50),
city character varying(50),
state character varying(50),
zip character varying(15),
country character varying(50),
)
我正在尝试创建一个 SQL 语句来更新第一个 table 中的 content_view_url
列,方法是在第二个 state
中附加其中的数据 table。第一个 table 中的 content_id
应该等于第二个 table 中的 entity_id
。另外,我需要在追加的两个字符串之间包含 -
并且还需要用 -
替换 state 列中的所有空格并将其转换为小写,因为数据是 URL。
我尝试使用 concat
函数创建示例查询,但它对我不起作用:
update content_definition
set content_view_url = CONCAT(select content_view_url
from content_definition, '-test')
where content_definition_id = 770764;
我收到错误:
ERROR: syntax error at or near "select"
SQL state: 42601
Character: 64
有什么办法可以实现吗?
在 Postgres 中,您可以在 UPDATE
中使用 FROM
子句。根据您问题中的查询:
update content_definition cd
set content_view_url = cd2.content_view_url || '-test'
from content_definition cd2
where cd2.content_definition_id = 770764;
基于问题:
update content_definition cd
set content_view_url = content_view_url || a.state
from bl_address a
where cd.content_id = a.entity_id;
或根据您的评论:
set content_view_url = content_view_url || '-' || replace(a.state, ' ', '-')
多亏了这些建议,我正在寻找的查询是:
update content_definition cd
set content_view_url = content_view_url || '-' || lower(replace(a.state, ' ' , '-'))
from bl_address a
where cd.content_id = a.entity_id and cd.content_type = 'business.location' and cd.site_id = 35;