PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL:Цикъл, докато дадено условие е вярно

Вашето мислене е грешно за SQL. Не мислете от гледна точка на цикли, условия и променливи; вместо това помислете как да опишете данните, които искате. Сложната част е, че искате заявката да препраща към собствените си резултати и това е, което рекурсивни CTE са за:

Търсите нещо подобно:

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

Това ще ви даде следното:

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

и след това можете да го съберете обратно в пътека, която би била по-списъчно свързана (или каквото и да е подходящо на вашия клиентски език) извън базата данни. Не е необходимо да включвате parent разбира се, но включването му ще ви помогне да коригирате "указателите".




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Регистърът има ли значение, когато „автоматично“ зарежда данни от S3 в таблица Redshift?

  2. Споделете връзка с postgres db между процеси в Python

  3. Как да внедрите Select For Update в EF Core

  4. Съхранение на изображения в bytea полета в PostgreSQL база данни

  5. Postgresql:Уникално ограничение над обединение на 2 колони