PostgreSQL, вставьте fuction, проверьте, существует ли значение и передайте значения этой строки в NEW при вставке - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть таблица людей со столбцами: имя, фамилия, номер телефона, адрес. Возможно ли иметь функцию, которая при вставке проверяет, существует ли уже номер телефона, и если да, то вместо того, что пользователь пытался вставить, он вставляет существующие значения (first_name и last_name)? Это позволило бы вставить новый адрес, будут скопированы только существующие имя и фамилия. Это совершенно противоположно upsert, который обновит существующую строку. Ни у одного из этих столбцов нет ограничений.

Я пытался использовать IF EXISTS, но на самом деле я не знаю, как передать существующие значения в NEW. Он работает с фиксированными значениями, например, THEN NEW.first_name = 'Jack'.

BEGIN
IF EXISTS (SELECT 1 FROM people p WHERE p.phone_number = NEW.phone_number) THEN
       NEW.first_name = ?;
END IF;
    RETURN NEW;

1 Ответ

1 голос
/ 13 апреля 2020

Я думаю, что вы ищете

INSERT INTO people(phone_number, first_name, last_name, address)
VALUES ($1,
        COALESCE((SELECT first_name FROM people WHERE phone_number = $1), $2), 
        COALESCE((SELECT last_name FROM people WHERE phone_number = $1), $3), 
        $4);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...