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

Pernyataan SQL rekursif (Postgresql) - versi yang disederhanakan

Penyiapan pengujian:

CREATE TEMP TABLE matrix (
    rowindex integer,
    columnindex integer,
    matrixvalue numeric);

INSERT INTO matrix VALUES
 (1,1,2),(1,2,2),(1,3,3),(1,4,3),(1,5,4)
,(2,1,4),(2,2,4),(2,3,5),(2,4,6)
,(3,1,3),(3,2,2),(3,3,2)
,(4,1,2),(4,2,1)
,(5,1,1);

Jalankan INSERT dalam LOOP dengan DO :

DO $$
BEGIN

FOR i IN 2 .. 5 LOOP
   FOR j IN 7-i .. 5 LOOP
      INSERT INTO matrix
      VALUES (i,j, (
         SELECT sum(matrixvalue)/2
         FROM   matrix
         WHERE  (rowindex, columnindex) IN ((i-1, j),(i, j-1))
         ));
   END LOOP;
END LOOP;

END;
$$

Lihat hasil:

SELECT * FROM matrix order BY 1,2;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernasi. PSQLException:nilai buruk untuk tipe int :admin

  2. Bagaimana cara melakukan kueri pencarian pada nilai kolom yang berisi string dengan nilai yang dipisahkan koma?

  3. Apa yang dapat menyebabkan idle dalam transaksi untuk pernyataan BEGIN

  4. Anotasi Jendela Django menggunakan kombinasi dengan klausa berbeda

  5. Perbarui beberapa catatan dalam satu transaksi ActiveRecord di Rails