PostgreSQL Вставить в регистр и конкат - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь создать триггер вставки, который возьмет два строковых поля (x и y) из таблицы A и объединит их в одно поле в таблице B. Если y не равно нулю, я хочу добавить '-'между х и у, когда я соединяю.Пока что мой код выглядит следующим образом:

BEGIN
    INSERT INTO B(xy,z)
        SELECT y,z,
            CASE WHEN y IS NOT NULL then concat('some prefix',x,' - ',y)
                ELSE concat('some prefix',x)
            END
        FROM(SELECT NEW.x, NEW.y NEW.z) as n;
        WHERE [some conditions]
    RETURN NEW;
END;

Насколько я понимаю, в поле xy таблицы B и z следует поместить «некоторый префикс x - y» или «некоторый префикс x»A в z of B, но я получаю ошибку "INSERT имеет больше выражений, чем целевых столбцов".Кто-нибудь знает, что я делаю не так?

1 Ответ

0 голосов
/ 11 июня 2018

Ваш внешний список выбора состоит из трех терминов - y, z и выражения case, просто удалите y и измените порядок двух других, и все будет в порядке:

INSERT INTO B(xy,z)
SELECT
    CASE WHEN y IS NOT NULL then concat('some prefix',x,' - ',y)
        ELSE concat('some prefix',x)
    END, -- First expression, goes into b.xy
    z -- SEcond expression, goes into b.z
FROM(SELECT NEW.x, NEW.y NEW.z) as n;
WHERE [some conditions]
...