sql >> Database >  >> RDS >> PostgreSQL

Gebruik INSERT ... BIJ CONFLICT NIETS TERUGGEVEN van mislukte rijen

Een beetje uitgebreid, maar ik kan niets anders bedenken:

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;

De buitenste selectie uit tags ziet de momentopname van de tafel zoals deze was voorheen de nieuwe tags zijn ingevoegd. De derde kolom met de constante is er alleen om de query te testen, zodat men kan zien welke rijen zijn ingevoegd en welke niet.



  1. krijg namen van door komma's gescheiden id's in SQL

  2. splits enkele rij in meerdere rijen in SQL

  3. Hoe kan ik een lijst met ID's uit een SQL-tabel halen als een door komma's gescheiden waardenreeks?

  4. Mysql - vind een tabel in alle databases