Hơi dài dòng, nhưng tôi không thể nghĩ ra bất cứ điều gì khác:
with all_tags (name) as (
values ('tag10'), ('tag6'), ('tag11')
), inserted (id, name) as (
INSERT INTO tags (name)
select name
from all_tags
ON CONFLICT DO NOTHING
returning id, name
)
select t.id, t.name, 'already there'
from tags t
join all_tags at on at.name = t.name
union all
select id, name, 'inserted'
from inserted;
Lựa chọn bên ngoài từ các thẻ tags
xem ảnh chụp nhanh của bảng như trước đây các thẻ mới đã được chèn. Cột thứ ba với hằng số chỉ ở đó để kiểm tra truy vấn để người ta có thể xác định hàng nào đã được chèn và hàng nào không.