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

SQL Query:Ambil baris yang dipesan dari tabel

Gunakan kueri rekursif (PostgreSQL versi 8.4 atau lebih baru):

/* test data:
CREATE TABLE foo (id, r_id, a_id, p_id) AS
    SELECT  1,9,9,0
    UNION ALL SELECT 2,9,105,108
    UNION ALL SELECT 3,9,102,9
    UNION ALL SELECT 4,9,106,105
    UNION ALL SELECT 5,9,108,102        
;
*/

-- the query you need:
WITH RECURSIVE sub(s_id, s_r_id, s_a_id, s_p_id, row) AS (
    SELECT id, r_id, a_id, p_id, 1 AS row FROM foo WHERE p_id = 0
UNION ALL
    SELECT id, r_id, a_id, p_id, (row + 1)  FROM foo JOIN sub ON s_a_id = p_id
)
SELECT * FROM sub ORDER BY row;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ValueError:Tidak dapat menambahkan *:instance ada di basis data default, nilai ada di basis data Tidak ada

  2. Postgres:Tambahkan batasan jika belum ada

  3. cara memperbaiki OperationalError:(psycopg2.OperationalError) server menutup koneksi secara tidak terduga

  4. PostgreSQL Di mana menghitung kondisi

  5. Bagaimana cara menulis ulang pernyataan SELECT ... CROSS JOIN LATERAL ... untuk versi PostgreSQL yang lebih lama?