PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wskazówki dotyczące używania klauzuli WITH w SQL

Jeśli może istnieć jednoczesny dostęp do zapisu do zaangażowanych tabel występują warunki wyścigu w następujących zapytaniach. Rozważ:

Twój przykład może użyj CTE (wspólne wyrażenie tabelowe), ale nie da ci niczego, czego nie może zrobić podzapytanie:

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

Zwrócony wiersz będzie zaktualizowany wersja.

Jeśli chcesz wstawić zwrócony wiersz do innej tabeli, to jest tam WITH klauzula staje się niezbędna:

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;

Zapytania modyfikujące dane za pomocą CTE zostały dodane w PostgreSQL 9.1.
instrukcja o WITH zapytania (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. Włącz obsługę SSL dla pgsql

  2. Jak wypróbować wiele opcji SELECT, aż wynik będzie dostępny?

  3. Railsy:rake db:create:all nie łączy się z bazą danych PostgreSQL

  4. Postgres:Rozwiń kolumnę JSON do wierszy

  5. Rails 3:błąd migracji podczas używania json jako typu kolumny w ActiveRecord wspieranym przez Postgres