sql >> Database >  >> RDS >> PostgreSQL

Richtlijnen voor het gebruik van de WITH-component in SQL

Als er gelijktijdige schrijftoegang . kan zijn voor de betrokken tabellen zijn er racevoorwaarden in de volgende vragen. Overweeg:

Uw voorbeeld kan gebruik een CTE (common table expression), maar het geeft je niets dat een subquery niet zou kunnen doen:

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.*;

De geretourneerde rij is de bijgewerkte versie.

Als je de geretourneerde rij in een andere tabel wilt invoegen, daar staat een WITH clausule wordt essentieel:

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;

Query's voor het wijzigen van gegevens met behulp van CTE's zijn toegevoegd met PostgreSQL 9.1.
De handleiding over WITH zoekopdrachten (CTE's).



  1. Hoe u uw PostgreSQL-versie kunt controleren

  2. SQL IN-operator voor beginners

  3. maven start postgres-server

  4. Mysql full text zoeken met match en tegen