PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Panduan menggunakan klausa WITH dalam SQL

Jika ada akses tulis bersamaan untuk tabel yang terlibat, ada kondisi balapan dalam kueri berikut. Pertimbangkan:

Contoh Anda bisa gunakan CTE (ekspresi tabel umum), tetapi itu tidak akan memberi Anda apa pun yang tidak dapat dilakukan oleh subquery:

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

Baris yang dikembalikan akan menjadi diperbarui versi.

Jika Anda ingin menyisipkan baris yang dikembalikan ke tabel lain, di situlah WITH klausa menjadi penting:

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;

Kueri modifikasi data menggunakan CTE ditambahkan dengan PostgreSQL 9.1.
The manual tentang WITH kueri (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. Heroku pg:push psql:FATAL:otentikasi kata sandi gagal untuk pengguna

  2. Memeriksa keberadaan indeks di PostgreSQL

  3. Bagaimana Log() Bekerja di PostgreSQL

  4. Menghitung tanggal di Postgres dengan menambahkan bulan?

  5. peran fatal psql tidak ada