Для этого требуется процедурный код, либо на стороне клиента базы данных на вашем любимом языке программирования (TM), либо процедурный язык на стороне сервера базы данных . Обычный SQL является декларативным языком и не имеет продвинутых условных выражений . SQL CASE
недостаточно для работы.
В Pl / Pg SQL это будет выглядеть так:
CREATE FUNCTION do_the_thing(
p_timestap timestamptz,
p_message text,
p_mode text,
p_user_id integer)
RETURNS VOID
LANGUAGE plpgsql AS $definition$
BEGIN
if p_mode = 'byGrade' then
insert into logs (_timestap, _message, _mode, _user_id)
select p_timestamp, p_message, p_mode, u.id from users u where grade = p_grade;
elsif p_mode = 'byIndividual' then
insert into logs (_timestap, _message, _mode, _user_id)
select p_timestamp, p_message, p_mode, p_user_id;
elsif p_mode = 'everyone' then
insert into logs (_timestap, _message, _mode, _user_id)
select p_timestamp, p_message, p_mode, id from users;
end if;
END;
$definition$;