PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Ръководство за използване на клаузата WITH в SQL

Ако може да има едновременен достъп за запис към включените таблици, има условия за състезание в следните заявки. Помислете за следното:

Вашият пример може използвайте CTE (израз на обща таблица), но няма да ви даде нищо, което подзаявка не може да направи:

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

Върнатият ред ще бъде актуализиран версия.

Ако искате да вмъкнете върнатия ред в друга таблица, там е WITH клаузата става съществена:

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;

Заявките за модифициране на данни, използващи CTE, бяха добавени с PostgreSQL 9.1.
The ръководство за WITH заявки (CTE).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на текущото време в UTC като стойност по подразбиране в PostgreSQL

  2. Значи инсталирах postgresql и localhost порт в конфликт с ruby ​​приложението?

  3. Създаване на тест за разширение в postgresql

  4. PostgreSQL заявка за списък с разрешени стойности в ограничение?

  5. PostgreSQL - релация [таблица] не съществува