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

PostgreSQL:pętla aż do spełnienia warunku

Twoje myślenie jest złe dla SQL. Nie myśl w kategoriach pętli, warunków i zmiennych; zamiast tego zastanów się, jak opisać żądane dane. Trudne jest to, że chcesz, aby zapytanie odnosiło się do własnych wyników i właśnie to rekurencyjne CTE są dla:

Szukasz czegoś takiego:

with recursive path as (
    select id, parent from T where id = 4
    union all
    select t.id, t.parent from T t join path p on t.id = p.parent
)
select id, parent
from path

To da ci to:

 id | parent 
----+--------
  4 |      2
  2 |      1
  1 |       

a następnie możesz umieścić to z powrotem w ścieżce, która byłaby bardziej powiązana lista (lub cokolwiek jest odpowiednie w twoim języku klienta) poza bazą danych. Nie musisz uwzględniać parent oczywiście, ale uwzględnienie go pomoże ci naprawić „wskaźniki”.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. funkcja nie istnieje, ale naprawdę myślę, że tak

  2. Czy możliwe są różne warunki dla każdego wiersza w zapytaniu?

  3. Lokalna instalacja/uruchamianie bazy danych Postgres

  4. Przegląd możliwości JSON w PostgreSQL

  5. Rails:Dodanie migracji w celu dodania tablicy (domyślnie puste)