Обновите данные в одной таблице с данными из другой таблицы с некоторыми строковыми манипуляциями - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть две таблицы базы данных следующим образом:

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 для обновления столбца content_view_url в первой таблице, добавив в него данные с state во второй таблице. content_id в первой таблице должно быть равно entity_id во второй таблице. Кроме того, мне нужно включить - между двумя добавляемыми строками, а также заменить все пробелы в столбце состояния на - и преобразовать его в нижний регистр, поскольку данные являются URL-адресами.

Я пытался создать пример запроса с помощью функции concat, но он не работает для меня:

update content_definition 
set content_view_url = CONCAT(select content_view_url 
                              from content_definition, '-test') 
where content_definition_id = 770764;

Я получаю сообщение об ошибке:

ОШИБКА: синтаксическая ошибка в или рядом с "select"
Состояние SQL: 42601
Символ: 64

Есть ли способ достичь этого?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Благодаря предложениям, я искал запрос:

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;
0 голосов
/ 14 сентября 2018

В Postgres вы можете использовать предложение FROM в UPDATE. На основании запроса в вашем вопросе:

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, ' ', '-')
...