sql >> Databasteknik >  >> RDS >> PostgreSQL

skrivbart gemensamt tabelluttryck och flera infogningssatser

Du kan använda CTE:er om du vill ha allt i ett uttalande:

with foo as (
      select * from ...
     ),
     b as (
      insert into bar
          select * from foo
          returning *
     )
insert into baz
    select * from foo;

Anmärkningar:

  • Du bör inkludera kolumnlistor med insert .
  • Du bör ange kolumnnamnen explicit för select * . Detta är viktigt eftersom kolumnerna kanske inte matchar i de två tabellerna.
  • Jag använder alltid returning med update /insert /delete i CTE. Detta är det normala användningsfallet -- så att du till exempel kan få tillbaka seriella ID från en insert.


  1. dyr fråga tar ner databasserver -- letar efter sätt att mildra

  2. Hur importerar jag ett excel-kalkylblad till SQL Server?

  3. MySQL CONVERT_TZ()

  4. Hur inaktiverar jag referensintegritet i Postgres 8.2?