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

Pokyny k použití klauzule WITH v SQL

Pokud může existovat souběžný přístup pro zápis k zapojeným tabulkám, v následujících dotazech jsou podmínky závodu. Zvažte:

Váš příklad může použijte CTE (common table expression), ale nedá vám nic, co by poddotaz nedokázal:

WITH x AS (
   SELECT  psp_id
   FROM    global.prospect
   WHERE   status IN ('new', 'reset')
   ORDER   BY request_ts
   LIMIT   1
   )
UPDATE global.prospect psp
SET    status = status || '*'
FROM   x
WHERE  psp.psp_id = x.psp_id
RETURNING psp.*;

Vrácený řádek bude aktualizovaný verze.

Pokud chcete vložit vrácený řádek do jiné tabulky, tam je WITH klauzule se stává zásadní:

WITH x AS (
   SELECT  psp_id
   FROM    global.prospect
   WHERE   status IN ('new', 'reset')
   ORDER   BY request_ts
   LIMIT   1
   )
, y AS (
   UPDATE global.prospect psp
   SET    status = status || '*'
   FROM   x
   WHERE  psp.psp_id = x.psp_id
   RETURNING psp.*
   )
INSERT INTO z
SELECT *
FROM   y;

Do PostgreSQL 9.1 byly přidány dotazy upravující data pomocí CTE.
The manuál o WITH dotazy (CTE).



  1. SQL Server 2008 Change Data Capture, kdo provedl změnu?

  2. ukládání záporného čísla do dekadického pole mysql tabulky od verze 5.0.3

  3. Použití DATE_ADD s názvem sloupce jako hodnota intervalu

  4. Jak NOT RLIKE funguje v MySQL