sql >> Database teknologi >  >> RDS >> PostgreSQL

skrivbart fælles tabeludtryk og flere insert-sætninger

Du kan bruge CTE'er, hvis du vil have det hele i én erklæring:

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

Bemærkninger:

  • Du bør inkludere kolonnelister med insert .
  • Du bør angive kolonnenavnene eksplicit for select * . Dette er vigtigt, fordi kolonnerne muligvis ikke stemmer overens i de to tabeller.
  • Jeg bruger altid returning med update /insert /delete i CTE'er. Dette er det normale tilfælde -- så du kan f.eks. få serielle id'er tilbage fra en indsats.


  1. antal rækker, der forekommer for hver dato i kolonnens datointerval

  2. Hurtigste forespørgsel til at kontrollere, om der findes en række i Oracle?

  3. Visning af LISTAGG-værdier i en celle baseret på værdien af ​​en anden kolonne

  4. SQL til at oprette matrixtabel