create table a(id int8 primary key);
with ids(id) as (
values(1)
), ins as (
insert into a(id)
select id from ids
on conflict (id) do nothing
returning *
)
select * from a where id in (select id from ids)
union all
select * from ins
;
2017-12-01 4:44 GMT-08:00 Владимир :
> Добрый день!
> Хотелось узнать вот такой вопрос.
> Создал функцию на plsql - create(xx)
> Которая вот что делает:
> Если xx есть в таблице tbl тогда возвращает 0 иначе создает строку xx в
> таблице tbl и возвращает x
>
> Так вот, а есть ли возможность тоже самое сделать, но на sql языке
> хотел что-то на подобии:
>
> SELECT 0 from tbl WHERE x=xx
> UNION ALL
> INSERT INTO tbl values (xx) WHERE xx NOT IN (SELECT x from tbl) RETURNING x
>
> Но не проходит.
> Может подскажете, очень интересно знать, возможно ли подобное.
>
>
>