PostgreSQL - Как поддерживать столбец в актуальном состоянии - PullRequest
0 голосов
/ 25 ноября 2018

Я новичок в SQL и пытаюсь обновить столбец (ex_counter) таблицы (ex_table).Этот столбец состоит из счетчика количества раз, когда идентификатор (ex_id) появляется во второй таблице (ex2_id в ex2_table).

ID может быть вставлен во вторую таблицу в любой момент.Если этот идентификатор уже существует, счетчик его соответствующего идентификатора в первой таблице должен быть обновлен (я полагаю, просто добавив 1).

Это две таблицы:

CREATE TABLE ex_table(
 ex_id SMALLINT,
 ex_counter SMALLINT;)

CREATE TABLE ex2_table(
 ex2_id SMALLINT;)

Я думаю, что это должно быть сделано примерно так.Закомментированный код - это псевдокод, который я не знаю, как реализовать:

CREATE TRIGGER ex_trigger AFTER
INSERT ON ex2_table
FOR EACH ROW EXECUTE PROCEDURE ex_func();



CREATE FUNCTION ex_func() RETURNS trigger AS $$ BEGIN

/* 
if ex2_id = ex_id 
    ex_counter = ex_counter + 1
*/

RETURN NULL;
END;
$$ LANGUAGE plpgsql;

Заранее спасибо!

1 Ответ

0 голосов
/ 25 ноября 2018

Примерно так

IF EXISTS (SELECT * FROM ex_table WHERE ex_id = new.ex2_id) THEN
    UPDATE ex_table 
    SET ex_counter = ex_counter + 1
    WHERE ex_id = new.ex2_id
ELSE
    INSERT INTO ex_table VALUES (new.ex2_id, 1)
END IF;

Обратите внимание, что на самом деле нет смысла хранить счетчик, так как вы можете легко получить значение, выполнив SELECT COUNT () ...

...