sql >> Databáze >  >> RDS >> PostgreSQL

Použijte VLOŽIT... PŘI KONFLIKTu NEDĚLEJTE NIC VRÁCENÍ neúspěšných řádků

Trochu upovídané, ale nic jiného mě nenapadá:

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;

Vnější výběr z tags vidí snímek tabulky tak, jak byl před byly vloženy nové značky. Třetí sloupec s konstantou slouží pouze k otestování dotazu, aby bylo možné identifikovat, které řádky byly vloženy a které ne.



  1. Počítat počet po sobě jdoucích návštěv

  2. použijte proměnnou php v názvu tabulky vytvoření mysql

  3. Vkládání více řádků do tabulky - dostává se chyba ORA-00933:SQL příkaz není správně ukončen

  4. Oracle nemůže ukládat emotikony