sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur INSERT I tabell från dynamisk fråga?

Den grundläggande frågan för att bygga kommandot dynamiskt:

SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
            , tbl_des, col_des, col_src, tbl_src) As sql
FROM   table3;

Detta ger en fråga som:

INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"

Observera den citerade stavningen med versaler. Till skillnad från i SQL-kommandon, där identifierare utan citattecken viks till gemener automatiskt, är strängarna i din tabell nu skiftlägeskänsliga!

Jag föreslår att du aldrig identifierare med dubbla citattecken och använd endast lagliga namn med små bokstäver.

För att automatisera:

DO
$$BEGIN
   EXECUTE (
      SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
                  , tbl_des, col_des, col_src, tbl_src) As sql
      FROM   table3
      -- WHERE table3_id = 123  -- select only *one* row!
      );
END$$;

Du behöver för att förstå format() fungera. Läs manualen .

Du kan linda in detta i en plpgsql-funktion också och skicka ytterligare parametrar:




  1. Sammanfoga tabeller baserat på maxvärdet

  2. Hur man väljer DISTINCT *

  3. MySQL batchfrågor med gräns

  4. Hur man har exakta decimalvärden utan avrundning i MySQL